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