【问题标题】:Json Deserialization of form Dictionary<string, Dictionary<string, string>>表单 Dictionary<string, Dictionary<string, string>> 的 Json 反序列化
【发布时间】:2012-07-05 22:27:51
【问题描述】:

我正在尝试将 [{"key" : "Microsoft", "value":[{"Key":"Publisher","Value":"abc"},{"Key":"UninstallString","Value":"c:\temp"}]} and so on ] 形式的 json 字符串反序列化为 C# 对象。

基本上是Dicionary&lt;string, Dictionary&lt;string, string&gt;&gt;的形式。我尝试使用 Newtonsoft 的 JsonConvert.Deserialize,但出现错误:

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

还有其他替代方法吗?

【问题讨论】:

  • 只需使用var obj = JsonConvert.DeserializeObject(...)。它适用于您的 json 字符串
  • 我目前正在这样做... string jsonString = json; (这包含上述格式的json) var values = JsonConvert.DeserializeObject>>(jsonString);........我仍然得到同样的错误。
  • im doing this currently. 你为什么不试试我发布的代码?我测试了它,它可以工作。
  • 谢谢 L.B.。但我正在寻找 Dictionary> 类型的对象,因为我已经有一个逻辑可以循环遍历这样的对象并将这些值插入数据库.
  • 谢谢 L.B 你的回答解决了我的问题!

标签: c# json


【解决方案1】:

我能找到的最好方法是:

string json = @"[{""Key"" : ""Microsoft"", ""Value"":[{""Key"":""Publisher"",""Value"":""abc""},{""Key"":""UninstallString"",""Value"":""c:\temp""}]}]";

var list = JsonConvert.DeserializeObject< List<KeyValuePair<string,List<KeyValuePair<string, string>>>> >(json);

var dict= list.ToDictionary(
         x => x.Key, 
         x => x.Value.ToDictionary(y=>y.Key,y=>y.Value));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多