首页 > 解决方案 > 无法弄清楚如何将此 JSON 反序列化为 C#

问题描述

我已经尝试了几个反序列化器,但无法弄清楚如何获取条目数组而不是每个条目的类。下面是 json2csharp 的输入和输出。

[
  {
    "subdeviceGuid": "000781000030534e",
    "componentId": "all",
    "entries": {
      "1619701200000": {
        "min": 0.437,
        "max": 2.014,
        "mean": 0.751
      },
      "1619704800000": {
        "min": 0.526,
        "max": 2.089,
        "mean": 0.893
      },
      "1619708400000": {
        "min": -1.456,
        "max": -0.989,
        "mean": -1.328
      }
    }
  }
]

以及由https://json2csharp.com/创建的 c# 类

// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); 
    public class _1619701200000
    {
        public double min { get; set; }
        public double max { get; set; }
        public double mean { get; set; }
    }

    public class _1619704800000
    {
        public double min { get; set; }
        public double max { get; set; }
        public double mean { get; set; }
    }

    public class _1619708400000
    {
        public double min { get; set; }
        public double max { get; set; }
        public double mean { get; set; }
    }

    public class Entries
    {
        public _1619701200000 _1619701200000 { get; set; }
        public _1619704800000 _1619704800000 { get; set; }
        public _1619708400000 _1619708400000 { get; set; }
    }

    public class Root
    {
        public string subdeviceGuid { get; set; }
        public string componentId { get; set; }
        public Entries entries { get; set; }
    }

标签: c#jsonjson.net

解决方案


自动生成的类通常在最好用字典表示的 JSON 结构方面存在问题。试试这些课程

public class Entry
{
    public double min { get; set; }
    public double max { get; set; }
    public double mean { get; set; }
}

public class Root
{
    public string subdeviceGuid { get; set; }
    public string componentId { get; set; }
    public Dictionary<string, Entry> entries { get; set; }
}

此外,您的 JSON 以 '[' 开头,表示它不是单个对象,而是一个数组。所以当你反序列化它时,你应该反序列化成一个数组Root而不是单个实例,就像这样

Root[] myDeserializedClass = JsonConvert.DeserializeObject<Root[]>(myJsonResponse);

推荐阅读