【问题标题】:Java GSON: Deserializing a field which has different typesJava GSON:反序列化具有不同类型的字段
【发布时间】:2013-09-02 10:49:29
【问题描述】:

我遇到了反序列化 json 的问题,其中有一个字段可以有多种类型,并且该类型由另一个字段确定。

为了弄清楚这个问题,请看下面的 3 个示例,json 称为 Extra,它的字段 Unit 始终是一个字符串,它的字段 Value 可以是小数(示例 1),一个对象(示例 2 ) 或对象列表(示例 3),具体取决于字段 Unit 的值。

我对 GSON 还很陌生,不知道如何解决这个问题,从查看 API 看来我必须编写自定义反序列化器?如果一个字段的类型取决于另一个字段,我将如何为这个示例编写一个?

Example 1
Extra {
Unit:"Decimal"
Value:0.0
}

Example 2
Extra {
Unit:"Object"
Value:{object}
}

Example 3
Extra {
Unit:"List of objects"
Value:[{object}
{object},
{object},
]
}

【问题讨论】:

  • 每个类字段都有一个类型。上面的每个示例都有 3 个 Java 类吗?
  • @SotiriosDelimanolis 是的,我只是在为这种情况编写反序列化程序时遇到了麻烦,或者是否有另一种方法可以将这些转换为 java 对象。

标签: java json serialization deserialization gson


【解决方案1】:

尝试以下操作: 取一个bean,例如:ExampleBean 在 ExampleBean 中获取另一个您的值列表的属性,例如:列表值;

然后尝试将 GSON 转换为 List,如下所示

公共静态列表 getListFromGsonString(String jsonString){ Gson gson = 新 Gson(); 类型 listType = new TypeToken() {}.getType(); 列表列表 = (List)gson.fromJson(jsonString, listType); 返回列表; }

这就是我们在项目中所做的。不适用则忽略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多