C#反序列化奇怪格式的JSON数组

时间:2019-07-04 07:35:36

标签: c# json json.net

我正在为会计软件开发客户端库。通过HTTP API完成通信,该API返回JSON响应。到目前为止,JSON一直很普通,可以轻松转换为Json.Net解析的类。但是有一个查询,它返回一个非常奇怪的数组-每个数组成员都有一个标题(不重要),并被当作不同的对象(100%相同的成员)对待。上一次我处理它时,我写了一个小助手来删除键,并用[]替换了{},但是我想知道是否可以直接使用Json.NET来正确解析它。

我正在使用最新的稳定的Json.Net,.Net Framework 4.6,并使用JsonConvert.DeserializeObject反序列化。

Json数组,无法解析

{
      ...
      "warehouses": {
        "1": {
          "warehouseID": 1,
          "totalInStock": 0,
          ...
        },
        "2": {
          "warehouseID": 2,
          "totalInStock": 0,
          ...
        },
        "3": {
          "warehouseID": 3,
          "totalInStock": 0,
          ...
        },
        "4": {
          "warehouseID": 4,
          "totalInStock": 0,
          ...
        }
      },
      ...
}

课程

public class MainObject{
    ...
    public List<Warehouse> warehouses { get; set;}
    ...
}

public class Warehouse{
    public int warehouseID { get; set; }
    public string totalInStock { get; set; }  
    ...
}

“无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [Warehouse]',因为该类型需要JSON数组(例如[1, 2,3])正确反序列化。

1 个答案:

答案 0 :(得分:8)

那不是数组,而是键值映射。 C#中对应的类为Dictionary<TKey,TValue>

重构为以下内容:

public class MainObject{
    ...
    public Dictionary<int, Warehouse> warehouses { get; set;}
    ...
}