将 json 反序列化为键值对列表

Deserialize json to list of KeyValue pairs

我有以下 json:

[
   {
      "key":"key1",
      "value":"val1"
   },
   {
      "key":"key2",
      "value":"val2"
   }
]

如何将它反序列化为 NameValuePair<string, string> 的 list/array?

示例:

var json = "[{\"key\":\"key1\",\"value\":\"val1\"},{\"key\":\"key2\",\"value\":\"val2\"}]";

var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<List<KeyValuePair<string,string>>>(json);

上面的代码运行但是列表里面的数据是null。不过,我可以将数组提取到 List<Object> 中。

首先,你不应该使用JavaScriptSerializer,微软甚至明确表示in the JavaScriptSerializer docs

要反序列化 Json.NET 中的对象,语法非常相似:

var json = "[{\"key\":\"key1\",\"value\":\"val1\"},{\"key\":\"key2\",\"value\":\"val2\"}]";
    
var result = JsonConvert.DeserializeObject<List<KeyValuePair<string,string>>>(json);

Fiddle here

更新

如果您使用的是 .NET Core 3/.NET 5 或 .NET 6,则包含 System.Text.Json 库而无需额外的依赖项。

使用该库反序列化的语法是:

var result =  JsonSerializer.Deserialize<List<KeyValuePair<string,string>>>(jsonString);