我有一些对象
public class MyObject {
private String name;
private String city;
public MyObject(String n, String c) {
name=n; city=c;}
public String getName() {return name;}
public String getCity() {return city;}
public void setName(String n) {name=n;}
public void setCity(String c) {city =c;}
}
我有一个自定义序列化器:
public class MySerializer implements JsonSerializer<MyObject> {
public JsonElement serialize(final MyObject myobj, final Type type, JsonSerializationContext context) {
JsonObject result = new JsonObject();
result.add("id", new JsonPrimitive(myobj.getName()));
return result;
}
}
基本上我只是希望仅对2个字段中的1个进行血清化。做这样的事情很有意义:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(MyObject.class, new MySerialize());
Gson gson = builder.create();
System.out.println(gson.toJson(new MyObject("test","something"));
然而,当我有另一个由“MyObject”组成的对象时,它会变得有点复杂(这是我的问题)。如何才能使正确的序列化程序仅序列化MyObject的一个字段。
所以我有另一堂课:
public class SomeObject {
private String id;
private MyObject foo;
private MyObject bar;
...
}
我有一个自定义序列化器:
public JsonElement serialize(final SomeObject something, final Type type, JsonSerializationContext context) {
JsonObject result = new JsonObject();
Gson gson = new Gson();
result.add("id", new JsonPrimitive(something.getId()));
//here i need help
result.add("myobject1", new JsonPrimitive(gson.toJson(something.getFoo())));
return result;
}
我不确定在SomeObject的自定义序列化程序中为“MyObject”创建GsonBuilder的最佳做法是什么?
我试过像:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(MyObject.class, new MySerialize());
builder.registerTypeAdapter(SomeObject.class, new SomeObjectSerializer());
Gson gson = builder.create();
System.out.println(gson.toJson(new SomeObject("id",new MyObject("test","something"),new MyObject("test2,"barrrrr"));
我会exepct“{”id“:”id“,”foo“{”id“:”test“},”bar“:{”id:“test2”}}
但事实并非如此。基本上我只想要一个自定义对象的第一个字段,我有一个seralizer,但我需要在另一个对象自定义序列化器内构建该序列化器吗?似乎错了,不知道为什么。
答案 0 :(得分:2)
请注意您如何访问自定义JsonSerializationContext
课程中的JsonSerializer
。您可以致电JsonSerializationContext#serialize(Object)
,Gson将使用已注册或默认的TypeAdapter
来序列化该对象,并返回JsonElement
,您可以将其添加到外部JsonElement
。