作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 json 文件:
{
"name": "bert",
"Bikes": {
"Bike1": {
"value": 1000,
"type": "Trek"
},
"Bike2": {
"value": 2000,
"type": "Canyon"
}
}
}
可能还有其他自行车,例如 Bike3...BikeN。我想反序列化为 C# 对象。问题是在反序列化步骤中,自行车数据完全丢失,导致 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; }
}
要解决此问题,必须更改使用的模型。但是这里需要做什么更改才能正确填充自行车数据?
注意:更改输入文档不是一个选项(因为它是一个规范)
最佳答案
您的代码结构没有反射(reflect)您的 json。使用动态属性名称反序列化 json 的常用方法是使用 Dictionary<string, ...>
(由 Json.NET
和 System.Text.Json
支持)。尝试以下操作:
public class Bike
{
public int Value { get; set; }
public string Type { get; set; }
}
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
public Dictionary<string, Bike> Bikes { get; set; }
}
Person.Bikes
应该改为Dictionary<string, Bike>
(也不需要 Bike.Id
属性)因为 Bikes
json 元素不是数组而是对象。
关于c# - 在 C# 中使用动态项反序列化 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62325776/
我是一名优秀的程序员,十分优秀!