将json反序列化为键值对列表[重复]

Posted

技术标签:

【中文标题】将json反序列化为键值对列表[重复]【英文标题】:Deserialize json to list of KeyValue pairs [duplicate] 【发布时间】:2018-10-21 02:44:48 【问题描述】:

我有以下 json:

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

如何将其反序列化为NameValuePair<string, string> 的列表/数组?

例子:

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&lt;Object&gt; 中。

【问题讨论】:

不要使用JavaScriptSerializer,使用Json.NET 【参考方案1】:

首先,你不应该使用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);

小提琴here

更新

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

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

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

【讨论】:

以上是关于将json反序列化为键值对列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将json键值反序列化为字典c#

如何将多个键值条目的 JSON 对象反序列化为 Rust 中的自定义结构

将 json 反序列化为匿名类型列表

如何将对象的json数组反序列化为字典[重复]

将特定 JSON 字段反序列化为 Unity 中的对象列表

Newtonsoft Json 将字典反序列化为来自 DataContractJsonSerializer 的键/值列表