【问题标题】:Use period for simple nested attributes using GSON使用 GSON 的简单嵌套属性的使用期
【发布时间】:2017-01-05 11:37:06
【问题描述】:

我想知道是否有办法使用 GSON 访问子嵌套属性。

考虑一下这个 JSON:

data: {
  myobject: {
     name: "test",
     status: {
       active: 1
     }
  }
}

我不想定义一个额外的类来处理状态,最好有一种机制来直接访问嵌套属性。

例如:

public class MyObject {

    @SerializedName("name")
    public String name;

    @SerializedName("status.active")
    private Boolean active;

}

有没有办法使用 GSON 或任何其他 Android JSON 解析器来做到这一点?

【问题讨论】:

  • 使用活动字段创建状态内部类。
  • 我在描述中明确提到我想避免这种情况......
  • 我编辑了您的问题以更好地代表您的意图
  • 谢谢@TimCastelijns

标签: java android json gson


【解决方案1】:

您可以使用名为 JsonDeserializer 的东西,这是一个示例:

Gson gson = new GsonBuilder()
            .registerTypeAdapter(Double.class, new JsonDeserializer<Double>() {
                @Override
                public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                    JsonObject jobject = (JsonObject) json;

                    return new MyObject (
                            jobject.get("name").getAsString(),
                            jobject.get("status").getAsJsonObject().get("active").getAsBoolean());
                }
            })
            .create();

发生的事情是您以自定义方式反序列化该类,我没有测试此代码,但它应该可以工作,至少这是正确的方向。

也是 MyObject 的构造函数

public class MyObject {

    @SerializedName("name")
    public String name;

    @SerializedName("status.active")
    private Boolean active;

    public MyObject(String name, Boolean active){
        this.name = name;
        this.active = active;
    }
}

提示:您也可以使用 JsonSerializer 做相反的事情,获取一个类并以自定义方式对其进行序列化,例如使用条件删除某些内容

【讨论】:

  • 即使这个答案朝着正确的方向发展,它也会比使用额外的内部类生成更多的样板代码......我正在寻找的是 SerializerName 注释的通用扩展能够在任何类中递归地使用它。
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 2023-04-08
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多