Gson serialize POJO with root value included?

前端 未结 4 1204
独厮守ぢ
独厮守ぢ 2020-12-29 22:52

I\'m having a problem serializing an object using Gson.

@XmlRootElement
class Foo implements Serializable {
    private int number;
    private String str;

         


        
相关标签:
4条回答
  • 2020-12-29 23:10

    A better way to do this is to create a wrapper class and then create an object of Foo inside it.

    Sample code:

    public class ResponseWrapper {
    
       @SerializedName("Foo")
       private Foo foo;
    
       public Foo getFoo() {
          return foo;
       }
    
       public void setFoo(Foo foo) {
          this.foo= foo;
       }
     }
    

    Then you can easily parse to JSON using:

    new GsonBuilder().create().toJson(responseWrapperObj);
    

    which will give you the desired structure:

    {"Foo":{"number":10,"str":"hello"}}
    
    0 讨论(0)
  • 2020-12-29 23:16

    If you are using Jackson api use the below lines

    mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

    0 讨论(0)
  • 2020-12-29 23:23

    You need to add the element at the top of the the object tree. Something like this:

    Gson gson = new Gson();
    JsonElement je = gson.toJsonTree(new Foo());
    JsonObject jo = new JsonObject();
    jo.add("Foo", je);
    System.out.println(jo.toString());
    // Prints {"Foo":{"number":10,"str":"hello"}}
    
    0 讨论(0)
  • 2020-12-29 23:28

    Instead of hardcoding the type you can do:

    ...
    jo.add(Foo.getClass().getSimpleName(), je);
    
    0 讨论(0)
提交回复
热议问题