gpt4 book ai didi

c# - 读取反序列化的json文件

转载 作者:行者123 更新时间:2023-12-05 05:38:55 29 4
gpt4 key购买 nike

我正在处理这段代码中获取 api 数据的部分。我在其中获取 json 文件并将字符串读入 json.net 以反序列化并将部分数据放入对象类中。 json读取的方式是一个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:“对象引用未设置到对象的实例。”

last 是我试图读取的 json 文件的一部分,我怀疑这是问题所在,但我可能错过了设置上述类的方法。 json api structure

最佳答案

在 Newtonsoft 中,模型绑定(bind)将在两种情况下发生

  1. 成员名称与写入的 json key 完全匹配
  2. 成员名称不同,但注释为[JsonProperty("jsonKeyNameHere")]指定它必须绑定(bind)到的确切 json 字段

因此在 WarehouseInformation 类中它应该是

  1. public List<Result> results { get; set; }
  2. [JsonProperty("results")] public List<Result> result { get; set; }

使用任何一个都很好,我个人更喜欢 #2,因为它允许您根据 C# 命名惯例命名您的成员,并且编译器不会向您发出警告,因为命名是非标准的。多做一些工作,但它可以生成干净的代码。但如果这无关紧要,或者您希望您的类(class)成员 1:1 模仿 json 键,那么路由 #1 就完全没问题。

在 NewtonSoft 中,json 结构决定了它要反序列化的类的组合模式。所以这就是您现在所拥有的:如果 WarehouseInformation 被视为整个 Json 响应的容器,那么您将获取“计数”字段和“结果”json 数组(转换为列表),以及每个元素在“结果”中,您正在使用“id”和“status”。这种组合模式是正确的,只是你需要成员的命名来对齐 json 键以进行正确的模型绑定(bind)

关于c# - 读取反序列化的json文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72820679/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com