繁体   English   中英

读取反序列化的 json 文件

[英]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 种情况下发生

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

因此,在 WarehouseInformation 类中,它应该是

  1. public List<Result> results { get; set; }
  2. [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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM