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

标签 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 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 的一个字段。

所以我还有一个类(class):

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"}}

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

最佳答案

请注意您如何访问自定义 JsonSerializer 类中的 JsonSerializationContext。您可以调用JsonSerializationContext#serialize(Object)而 Gson 将使用注册的或默认的 TypeAdapter序列化该对象并返回 JsonElement您可以将其添加到外部 JsonElement

关于java - 如何在另一个序列化程序中使用自定义 Json 序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302901/

相关文章:

json - 请求参数RefreshType格式不正确

c# - 不使用数据集通过 Web 服务传输数据库查询

database - WordPress 存储主题选项

java - 为什么 Sonar 在具有构造函数和 setter 的类上显示重复错误?

Javascript : Save JSON data to firebase database

java - 为什么这个 GridBagLayout 没有按计划出现?

json - ElasticSearch 对字段的多次精确搜索未返回结果

c# - Mono 不支持 System.Runtime.Serialization.DataMemberAttribute EmitDefaultValue 设置

java - 膨胀类 android.support.v7.widget.CardView 时出错

java - 为什么在运行时找不到公共(public)类?