【问题标题】:Dynamically Deserialize JSON to C# Dictionary将 JSON 动态反序列化为 C# 字典
【发布时间】:2017-09-26 06:00:12
【问题描述】:

我有一个 JSON 文件,我正在尝试将其反序列化为一个以字典为值的列表,但在以良好格式获取输出并在反序列化后努力对其进行索引/解析时遇到了困难。我是新手,希望能得到帮助。我希望键/值对看起来像: {"greeting" : ["greet1": "hey", "greet2" : "hi"]}

JSON 文件如下:

{
"greeting": [
        {
          "greet1": "hey",
          "greet2": "hi"
        }
      ],
"bye": [
        {
          "bye1": "adios"
        }
      ]
}

尝试的代码:

public static Dictionary<string, List<Dictionary<string, string>>> jsonResponses = new Dictionary<string, List<Dictionary<string, string>>>();

public static void DeserializeJsonDict()
{
    string jsonURL = HttpContext.Current.Server.MapPath("./theFile.json");

    using (var webClient = new System.Net.WebClient())
    {
        var jsonData = webClient.DownloadString(jsonURL);
        jsonResponses = JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, string>>>>(jsonData);

    }

}

【问题讨论】:

  • 你想动态生成一个类对象作为输入的jsonstring吗?喜欢:Object{objGreeting{propGreeting1,propGreeting2},objBye{propBye1}}?
  • 你的问题是什么? JsonConvert.DeserializeObject&lt;Dictionary&lt;string, List&lt;Dictionary&lt;string, string&gt;&gt;&gt;&gt;(jsonData) 完美运行。有关演示,请参阅 dotnetfiddle.net/V3NX3n
  • 是的,它有效,但我现在正在努力索引输出以提取值。我将如何索引字典和字典中的列表?
  • JsonConvert.DeserializeAnonymousType(System.Uri.UnescapeDataString(str), new Dictionary());

标签: c# json dictionary serialization


【解决方案1】:
var str = @"{'greeting':[{'greet1': 'hey','greet2': 'hi'}],'bye': [{'bye1': 'adios'}]}";    
var data = JsonConvert.DeserializeAnonymousType(str, new Dictionary<dynamic, dynamic>());

您可以直接引用属性,例如data.greeting。此外,还有另一种遍历转换结果的方法 - 使用 KeyValuePair&lt;string, dynamic&gt; 作为泛型类型参数使您能够迭代动态值,例如

foreach (var i in data){
  Console.WriteLine(i.Key);
  foreach(var v in i.Value) Console.WriteLine(v); 
}

https://dotnetfiddle.net/UUvMeA

【讨论】:

    【解决方案2】:
    string json = @"{""key1"":""value1"",""key2"":""value2""}";
    
    var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
    

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      相关资源
      最近更新 更多