C# -无法反序列化当前JSON数组的错误

tjjdgumg  于 2023-06-25  发布在  C#
关注(0)|答案(2)|浏览(185)

我想显示州和城市的列表。
以下是我所做的州和城市列表:

[
  { "State": "California", 
    "City": 
      ["Los Angeles", 
       "San Diego", 
       "San Francisco" 
      ]
   }, 
   { "State": "Texas", 
     "City": 
       ["Houston", 
        "San Antonio", 
        "Dallas"
       ]
    }
]

这是我的代码

List<string> stateCities = new List<string>();
                var dictionary = stateCities.Select(x => JsonConvert.DeserializeObject<Dictionary<string, object>>(x))
                     .ToDictionary(x => x["State"].ToString(), x => ((JArray)x["City"]).ToObject<List<string>>());

                    lookUpEditState.Properties.DataSource = dictionary;
                    lookUpEditState.Properties.ValueMember = "State";
                    lookUpEditCity.Properties.DataSource = dictionary;
                    lookUpEditCity.Properties.ValueMember = "City";
                    lookUpEditCity.CascadingOwner = lookUpEditState;
                }

我得到了这个错误:
设置失败:无法反序列化当前JSON数组(例如[1,2,3])转换为类型'System.Collections.Generic.Dictionary' 2[System.String,System.Object]',因为该类型需要JSON对象(例如{“name”:“value”})来正确反序列化。要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化的类型更改为数组或实现集合接口的类型(例如ICollection,IList),比如可以从JSON数组反序列化的List。也可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。路径“”,行% 1,位置% 1。
你知道我该怎么解决吗?谢谢你

muk1a3rh

muk1a3rh1#

您需要使用与JSON表示相匹配的类来反序列化JSON。在本例中,您有一个对象数组,这些对象具有State和City属性,因此您可以使用以下内容:

var template = new [] { new { State = "", City = new string[] {} }};
var array = JsonConvert.DeserializeAnonymousType(jsonText, template);

如果你真的需要,你可以把它转换成字典:

var dictionary = array.ToDictionary( x => x.State, y => y.City );

...这将给予你一个Dictionary<string,string[]>

0qx6xfy6

0qx6xfy62#

这对我很有效

Dictionary<string, List<string>> dictionary = JArray.Parse(json)
                        .ToDictionary(ja => (string)ja["State"],ja => ja["City"]
                        .Select(i => (string)i).ToList());

相关问题