裏面我有一些對象如何使用自定義JSON序列另一個串行
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;
}
}
基本上我只是想只的21到24 serilize領域。做這樣的事情,當這個偉大的工程:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(MyObject.class, new MySerialize());
Gson gson = builder.create();
System.out.println(gson.toJson(new MyObject("test","something"));
但它變得更復雜一點(這裏是我的問題)時,我有一個是由「myObject的」 S另一個對象。我怎樣才能得到正確的序列化程序只序列化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;
}
我不知道,如果它的最佳實踐,爲「MyObject來」創造GsonBuilder內SomeObject的自定義序列化程序是什麼?
香港專業教育學院嘗試類似:
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 「 」富「{ 」ID「: 」測試「}, 」吧「:{」 ID :「test2」}}
但事實並非如此。 bascially我想只是自定義對象中的第一個字段,因爲我有一個Seralizer,但是我需要在另一個對象自定義序列化器中構建該序列化程序嗎?似乎錯了,不知道爲什麼。
剛剛嘗試過,並得到相同的結果。我如何知道SomeObjectSerializer()是否已經在上下文中定義。例如,即時將它添加到GsonBuilder(),然後調用「create」來獲取toJson字符串,但它似乎沒有被調用。 – user1772250
@user嘗試調試並檢查在調用'JsonSerializationContext#serialize()'時是否實際註冊了'SomeObjectSerializer'。 –