我有两个不同的Jsons代表的对象:
JSON v1:
{
"names":[{"name":John},{"name":Eve}],
"version": 1
}
JSON v2:
{
"names":[{"name":"John", "age":22},{"name":"Eve", "age":35}],
"version": 2
}
现在我有一个可以解析Json第一个版本的类:
[JsonObject("Class")]
public class PeopleEntity
{
public string name{ get; set; }
}
public class People
{
public List<PeopleEntity> names{ get; set; }
public string version{ get; set; }
}
这就是它的解析方式:
result = JsonConvert.DeserializeObject<People>(json_data, new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore
});
现在,问题是,解析第二版JSON的请求来了。处理这个问题的最佳解决方案是什么?
我有一个想法,就是制作接口列表(因为属性名称总是存在),并为它做多个实现,每个版本一个。
答案 0 :(得分:0)
我没有看到任何需要接口来解决这个问题。
如果要将两个版本的JSON反序列化为相同的类型,可以将{nulllable age属性添加到PersonEntity
,如下所示:
[JsonObject("Class")]
public class PeopleEntity {
public string name { get; set; }
public int? age { get; set; }
}
请注意?
类型后面的int
,这意味着该属性可以为null。使用Json.NET,如果将v1 JSON反序列化到此类中,name
将按预期填充,age
将保持为空。
或者,由于您知道预先对哪个版本的JSON进行反序列化,因此每个版本可以使用不同的类型。使用v1存在的PeopleEntity
类型,并创建一个为v2添加age
属性的派生类。