JSON 数组到 C# 字典

bbs*_*nbb 4 c# json json.net

如何转换一个JSON数组像这样

[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]
Run Code Online (Sandbox Code Playgroud)

到带有 json.net 或系统类的 C# 字典。

json.net 可以直接序列化为字典,前提是您将其提供给对象而不是数组。

Prz*_*icz 7

也许转换为 KeyValuePairs 数组会有所帮助

using System.Linq;

var list = JsonConvert.DeserializeObject<IEnumerable<KeyValuePair<string, string>>>(jsonContent);
var dictionary = list.ToDictionary(x => x.Key, x => x.Value);
Run Code Online (Sandbox Code Playgroud)

  • 这真的对你有用吗?我得到了正确数量的 kvps,但它们的键和值都是空的。我认为这是因为 Json.Net 无法使用 Create() 方法构建它们。我最终不得不使用单元素字典列表。 (8认同)

Chr*_*ris 6

对于任何感兴趣的人 - 这也有效:

JSON 示例:

[{"device_id":"VC2","command":6,"command_args":"测试args10"}, {"device_id":"VC2","command":3,"command_args":"测试args9"} ]

C#:

JsonConvert.DeserializeObject<List<JObject>>(json)
            .Select(x => x?.ToObject<Dictionary<string, string>>())
            .ToList()
Run Code Online (Sandbox Code Playgroud)


小智 5

其实很简单:

假设您在字符串中获取 json,如下所示:

string jsonString = @"[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]";
Run Code Online (Sandbox Code Playgroud)

然后你可以使用 JSON.NET 反序列化它,如下所示:

JArray a = JArray.Parse(jsonString);

// dictionary hold the key-value pairs now
Dictionary<string, string> dict = new Dictionary<string, string>();

foreach (JObject o in a.Children<JObject>())
{
    foreach (JProperty p in o.Properties())
    {
        string name = p.Name;
        string value = (string)p.Value;
        dict.Add(name,value);
    }
}
Run Code Online (Sandbox Code Playgroud)