【问题标题】:How to parse JSON with Gson, when there is no @SerializedName当没有@SerializedName 时如何使用 Gson 解析 JSON
【发布时间】:2017-03-31 08:47:29
【问题描述】:

我有以下 JSON 文档:

{
  "1786042": {},
  "2064178": {
    "initialImportDate": "2015-11-13T12:22:53.585",
    "hideCrossedOutPrice": false,
    "salesCount": 0,
  },
  ...
}

如何访问由 id 而不是名称定义的可以反序列化的产品列表?

【问题讨论】:

标签: json serialization gson


【解决方案1】:

你可以在这里使用TypeToken

我假设有一个名为 Product 的类,其中包含 initialImportDatehideCrossedOutPrice 等属性。

现在你可以使用TypeToken 来反序列化这个json,像这样:

Type productMap = new TypeToken<Map<Integer, Product> >() {}.getType();
Map<Integer, Product> result= gson.fromJson(jsonString, productMap);

【讨论】:

  • 我没有提到,我也在使用 Retrofit。所以我有一个像call.enqueue(new Callback&lt;TypeToken&lt;Map&lt;Integer, AwesomeProduct&gt;&gt;&gt;() 这样的电话,这给了我Failed to invoke protected com.google.gson.reflect.TypeToken() with no args
  • @4ndro1d Sachin Gupta 为您提供了一个通用解决方案,当它是“写下”实际类型信息的唯一方法时,它与“vanilla”Gson 一起使用。你的回调必须接受Map&lt;Integer, AwesomeProduct&gt;而不是输入token,因为Retrofit应该能够分析接口方法本身的返回类型。
猜你喜欢
  • 2019-01-28
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多