C# 获得;因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化;反序列化Json对象时出错

C# 获得;因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化;反序列化Json对象时出错,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,请帮帮我。我在哪里丢失了信息? 我需要反序列化以下JSON字符串 {“结果”:[{“系列”:[{“名称”:“PWR_00000555”,“列”:[“时间”,“最后”],“值”:[[“1970-01-01T00:00:00Z”,72]}] 为此,我定义了我的类: public class Serie { public Serie() { this.Points = new List<object[]>(); } [JsonPropert

请帮帮我。我在哪里丢失了信息? 我需要反序列化以下JSON字符串

{“结果”:[{“系列”:[{“名称”:“PWR_00000555”,“列”:[“时间”,“最后”],“值”:[[“1970-01-01T00:00:00Z”,72]}]

为此,我定义了我的类:

public class Serie
{
    public Serie()
    {
        this.Points = new List<object[]>();
    }

    [JsonProperty(PropertyName = "results")]
    public string results { get; set; }

    [JsonProperty(PropertyName = "series")]
    public string sries { get; set; }


    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }

    [JsonProperty(PropertyName = "columns")]
    public string[] ColumnNames { get; set; }

    [JsonProperty(PropertyName = "values")]
    public List<object[]> Points { get; set; }
公共类系列
{
公共系列()
{
this.Points=新列表();
}
[JsonProperty(PropertyName=“results”)]
公共字符串结果{get;set;}
[JsonProperty(PropertyName=“series”)]
公共字符串sries{get;set;}
[JsonProperty(PropertyName=“name”)]
公共字符串名称{get;set;}
[JsonProperty(PropertyName=“columns”)]
公共字符串[]列名称{get;set;}
[JsonProperty(PropertyName=“values”)]
公共列表点{get;set;}
但是当我尝试使用反序列化程序时,它给出了一个异常

{“无法将当前JSON对象(例如,{“name\”:\“value\”})反序列化为'System.Collections.Generic.List`1[InfluxDB.Serie]”类型,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。\r\n若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或者更改反序列化类型,使其成为可以从JSON对象反序列化的普通.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到该类型,以强制其从JSON对象反序列化。\r\n路径“结果”,第2行,位置12。“}


如果您愿意牺牲IntelliSense和编译时类型安全性,那么您可以简单地将JSON反序列化为动态对象:

dynamic parsed = JsonConvert.DeserializeObject(jsonString);
PrintAllNames(parsed);

//...

private void PrintAllNames(dynamic obj)
{
    foreach(var result in obj.results)
        foreach(var item in result.series)
            Console.WriteLine(item.name);
}

出现此错误是因为您的JSON是分层的,而您的类基本上是平面的。如果您使用验证和重新格式化JSON,您可以更好地查看结构:

{
    "results": [
        {
            "series": [
                {
                    "name": "PWR_00000555",
                    "columns": [
                        "time",
                        "last"
                    ],
                    "values": [
                        [
                            "1970-01-01T00:00:00Z",
                            72
                        ]
                    ]
                }
            ]
        }
    ]
}
这对应于以下类结构(我最初使用它生成,然后手动编辑以添加
[JsonProperty]
属性):

公共类根对象
{
[JsonProperty(“结果”)]
公共列表结果{get;set;}
}
公开课成绩
{
[JsonProperty(“系列”)]
公共列表系列{get;set;}
}
公开课系列
{
[JsonProperty(“名称”)]
公共字符串名称{get;set;}
[JsonProperty(“列”)]
公共列表列名称{get;set;}
[JsonProperty(“值”)]
公共列表点{get;set;}
}
您可以将JSON反序列化到上述类结构中,如下所示:

var root = JsonConvert.DeserializeObject<RootObject>(jsonString);
var root=JsonConvert.DeserializeObject(jsonString);

Fiddle:

非常感谢,我一直在努力解决分层JSON问题,这个示例非常适合我!虽然我的具体情况与这个问题不同,但这个答案准确地告诉了我如何在C#中修复自己的JSON对象所需的信息-谢谢!
var root = JsonConvert.DeserializeObject<RootObject>(jsonString);