GSON:我可以为这种动态JSON构建一个自定义反序列化器吗?

时间:2015-10-04 20:39:20

标签: java json gson

我的JSON数据

我的JSON数据可以如下所示

它可以作为 JSON数组,字段名称食物就像这样

{
  "foods": [
    {
      "url": "api/v1/blah",
      "name": "Big Mac",
      "description": "Really good",
      "price": "£10"
    },
    {
      "url": "api/v1/blah2",
      "name": "Cheese burger",
      "description": "Very nice",
      "price": "£230"
    }
  ]
}

如数据中所示,有一个关注链接“url”。这为单个食物提供JSON数据,但更多提供附加数据

{
  "food": {
    "url": "api/v1/blah",
    "name": "Big Mac",
    "description": "Really good",
    "price": "£10",
    "cal": "over 900000",
    "contains": "beef"
  }
}

如我们所见,我们现在有cal并包含字段

到目前为止我做了什么

我有它工作,但它不是很好,这就是我要问的原因。

注意我省略了很多锅炉板。

FoodLite.java

为基本属性建模

public class Food {
    public String url;
    public String name;
    public String description;
    public String price;
    public String cal;
    public String contains;
}

FoodFat.java

对从以下链接检索的数据进行建模。请注意,因为它包含与FoodLite.java相同的数据,所以我只是从它继承

public class FoodFat extends FoodLite {
    public String cal;
    public String contains;
}

现在这里的事情变得混乱。

FoodSingle.java

public class FoodSingle {
    @SerializedName("food")
    public FoodFat mFoodFat;
}

FoodList.java

public class FoodList {
    @SerializedName("foods")
    public ArrayList<FoodLite>mManyFoods;
}

所以这很有效,但在我看来它真的很乱。我之前在GSON中使用过自定义解串器,但我不知道从哪里开始。

我们有

json.isJsonArray()) 

检查它是否是一个数组。

json.isJsonObject()

检查其对象是否

然而,我的困惑是返回类型。我需要能够返回FoodLite或FoodFat。这可能吗?

另外,我读到context参数也可以将对象的反序列化委托给另一个注册类型的适配器,否则它将使用默认机制。理想情况下,如果我可以使用默认值同时尝试确定它是单个还是数组,这样我将来不需要编辑此反序列化器

0 个答案:

没有答案