将JSON动态转换为C#字典

px9o7tmv  于 2023-10-21  发布在  C#
关注(0)|答案(3)|浏览(175)

我有一个JSON文件,我试图将其转换为一个以字典为值的列表,但在获得一个好格式的输出时遇到了困难,并且在转换后难以索引/解析它。我是新来的,希望能得到帮助。我希望键/值对看起来像这样:{“问候”:[“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);

    }

}
xv8emn3q

xv8emn3q1#

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

您可以直接引用属性,例如:data.greeting。另外,还有一种方法可以遍历转换结果-使用KeyValuePair<string, dynamic>作为泛型类型参数,可以让您遍历动态值,例如。

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

https://dotnetfiddle.net/UUvMeA

wribegjk

wribegjk2#

当前json格式的问题是,“greeting”和“bye”将被用作格式化中的键。这可以防止对象被转换为列表或数组。
如果JSON是通过手动编辑文件创建的,则如果将其更改为

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

.它可以具体描述如下:

var data = JsonSerializer.Deserialize<List<Dictionary<string, Dictionary<string, string>>>>(jsonInputData);

标签:C# - Deserialize array of JSON objects into Dictionary

fiei3ece

fiei3ece3#

string json = @"{""key1"":""value1"",""key2"":""value2""}";

var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

相关问题