私はいくつかのオブジェクトを持っています
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 の 1 つのフィールドのみをシリアル化する正しいシリアライザーを取得するにはどうすればよいですか。
だから私は別のクラスを持っています:
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"));
そして、私は "{"id":"id","foo"{"id":"test"},"bar":{"id:"test2"}} を実行します
しかし、そうではありません。基本的に、私はセラライザーを持っているカスタムオブジェクトの最初のフィールドだけが欲しいのですが、別のオブジェクトのカスタムシリアライザー内にそのシリアライザーを構築する必要がありますか? 間違っているようですが、理由はわかりません。