[英]Reading deserialized json file
我正在处理这段代码的一部分,它正在抓取 api 数据。 在其中,我将 json 文件读取到 json.net 中的字符串以反序列化并将部分数据放入对象类中。 json 读取的方式是一个 Result 对象的列表。 我已经从 root 方法中获得了计数,但是我在从 Result 对象列表中获取数据时遇到了问题。
对象类
public class Result
{
public string id { get; set; }
public string status { get; set; }
}
public class WarehouseInformation
{
public int count { get; set; }
public List<Result> result { get; set; }
}
orderData 是正在读入的 json 文件的字符串。
{
Console.WriteLine("orderdatatoarray");
WarehouseInformation warehouseInformation = JsonConvert.DeserializeObject<WarehouseInformation>(orderData);
if (warehouseInformation != null)
{
var test = warehouseInformation.count;
string[] orderStringArr = new string[0];
Console.WriteLine(test);
List<Result> idList = new List<Result>();
return orderStringArr;
}
else
{
string[] orderStringArr = new string[0];
return orderStringArr;
}
}
}
错误是:System.NullReferenceException:“对象引用未设置为对象的实例。”
最后是我试图读取的 json 文件的一部分,我怀疑这是错误的问题,但我可能错过了设置上述类的方法。 json api结构
在 Newtonsoft 中,模型绑定将在 2 种情况下发生
[JsonProperty("jsonKeyNameHere")]
注释以指定它必须绑定到的确切 json 字段因此,在 WarehouseInformation 类中,它应该是
public List<Result> results { get; set; }
[JsonProperty("results")] public List<Result> result { get; set; }
使用其中任何一个都很好,我个人更喜欢#2,因为它允许您根据 C# 命名惯例命名您的成员,并且编译器不会向您发出警告,因为命名是非标准的。 更多的工作,但它使代码更干净。 但是,如果这无关紧要,或者您更喜欢您的班级成员以 1:1 的比例模仿 json 键,那么路线 #1 就可以了。
在 NewtonSoft 中,json 结构决定了它旨在反序列化的类的组合模式。 所以这就是您现在所拥有的:如果 WarehouseInformation 被视为整个 Json 响应的容器,那么您将获取“count”字段和“results”json 数组(转换为 List),以及每个元素在“结果”中,您正在使用“id”和“status”。 这种组合模式是对的,它只是你需要成员的命名来对齐 json 键以进行正确的模型绑定
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.