我有下面的json文档:
{
"name": "bert",
"Bikes": {
"Bike1": {
"value": 1000,
"type": "Trek"
},
"Bike2": {
"value": 2000,
"type": "Canyon"
}
}
}
我想反序列化为C#对象。问题是在反序列化步骤中bikes数据完全丢失,导致空Bikes集合。
复制代码:
[Test]
public void FirstCityJsonParsingTest()
{
var file = @"./testdata/test.json";
var json = File.ReadAllText(file);
var res = JsonConvert.DeserializeObject<Person>(json);
Assert.IsTrue(res.Name == "bert");
// next line is failing, because res.Bikes is null...
Assert.IsTrue(res.Bikes.Count == 2);
}
public class Bike
{
public string Id { get; set; }
public int Value { get; set; }
public string Type { get; set; }
}
public class Person
{
public string Name { get; set; }
public List<Bike> Bikes { get; set; }
}
要解决这个问题,必须更改所用的模型。但是要正确填写自行车数据,需要做什么更改呢?
注意:更改输入文档不是一个选项(因为它是一个规范)
1条答案
按热度按时间r1wp621o1#
您的代码结构未反映您的json。使用动态属性名称反序列化json的常用方法是使用
Dictionary<string, ...>
(Json.NET
和System.Text.Json
都支持)。请尝试以下操作:Person.Bikes
应更改为Dictionary<string, Bike>
(也不需要Bike.Id
属性),因为Bikes
json元素不是数组而是对象。