Java 如何在另一个序列化程序中使用自定义Json序列化程序

Java 如何在另一个序列化程序中使用自定义Json序列化程序,java,json,serialization,Java,Json,Serialization,我有一些东西 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 s

我有一些东西

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;
}
}
  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”组成的对象时,它会变得更复杂一些(这是我的问题)。如何使正确的序列化程序只序列化MyObject的一个字段

所以我有另一门课:

public class SomeObject {
   private String id;
   private MyObject foo;
   private MyObject bar;
   ...
}
我有一个自定义序列化程序:

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;
}
}
  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());
       Gson gson = builder.create();
       System.out.println(gson.toJson(new MyObject("test","something"));
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”}


但事实并非如此。基本上,我只想要自定义对象中的第一个字段,我有一个序列化程序,但是我需要在另一个对象自定义序列化程序中构建该序列化程序吗?似乎是错误的,不知道为什么。

请注意您如何在自定义
JsonSerializer
类中访问
JsonSerializationContext
。您可以调用,Gson将使用已注册或默认值来序列化该对象,并返回一个可添加到外部
JsonElement

的值。您刚刚尝试了这个方法,并得到了相同的结果。如何知道上下文中是否定义了SomeObjectSerializer()。例如,我在调用“create”之前将其添加到GsonBuilder(),该函数用于获取toJson字符串,但它似乎没有被调用。@用户尝试调试并检查调用
JsonSerializationContext时
SomeObjectSerializer
是否实际注册了