首页 > 解决方案 > 无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'System.Collections.Generic.Dictionary

问题描述

我有第三方提供的以下 JSON 格式:

{
"data": {
    "objects": {
        "0ea73fa9333a7cbeb2d8c69a14b9970f": {
            "Id": "0ea73fa9333a7cbeb2d8c69a14b9970f",
            "Name": "test"
        },
        "38b1390ff6bc8a9837105d181000bcc8": {
            "Id": "38b1390ff6bc8a9837105d181000bcc8",
            "Name": "test"
        }
    }
}}

我正在使用这个模型反序列化:

public class ObjectTypes
{
    public ObjectTypeList data { get; set; }

    public class ObjectTypeList
    {
        public Dictionary<string, Object> objects { get; set; }
    }

    public class Object
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }
}

这工作正常,但有时 JSON 是空的,如下所示:

{
"data": {
    "objects": []
}
}

导致此异常:

无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“System.Collections.Generic.Dictionary`2[System.String,Models.ObjectTypes+Object]”,因为该类型需要 JSON 对象(例如 { "name":"value"}) 以正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。路径“data.objects”,第 1 行,位置 20。

关于如何解决这个问题的任何建议?

标签: c#arraysjson

解决方案


您应该反序列化ObjectTypes 类型

        public partial class ObjectTypes
        {
            [JsonProperty("data")]
            public Data Data { get; set; }
        }

        public partial class Data
        {
            [JsonProperty("objects")]
            public Dictionary<string, Object> Objects { get; set; }
        }

        public partial class Object
        {
            [JsonProperty("Id")]
            public string Id { get; set; }

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

推荐阅读