Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JSON数组到C字典_C#_Json_Json.net - Fatal编程技术网

C# JSON数组到C字典

C# JSON数组到C字典,c#,json,json.net,C#,Json,Json.net,如何转换这样的JSON数组 [{"myKey":"myValue"}, {"anotherKey":"anotherValue"}] 到带有json.net或系统类的C字典 json.net可以直接序列化到字典,但前提是向它提供一个对象,而不是数组。实际上非常简单: 假设您以字符串形式获取json,如下所示: string jsonString = @"[{"myKey":"myValue"}, {"anotherKey":"anotherValue"}]"; 然后可以使用JSON.NET对

如何转换这样的JSON数组

[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]
到带有json.net或系统类的C字典


json.net可以直接序列化到字典,但前提是向它提供一个对象,而不是数组。

实际上非常简单:

假设您以字符串形式获取json,如下所示:

string jsonString = @"[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]";
然后可以使用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);
    }
}

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

using System.Linq;

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

我发现使用KeyValuePairs列表不起作用。我得到了正确数量的元素,但它们有空键和值


最后,对我有效的唯一解决方案是反序列化到字典列表,每个字典都有一个kvp元素。

必须按以下格式发送数据:

"Values": [
  {"Key" : "abc"  , "Value": 23.14},
  {"Key" : "abc1" , "Value": 23.11},
  {"Key" : "abc2" , "Value": 23.17},
  {"Key" : "abc3" , "Value": 23.19}
]

因此,转换过程将起作用。在我尝试将JSON转换为dictionary的过程中,这对任何感兴趣的人来说都很有效-这也很有效:

JSON示例:

[{device_id:VC2,command:6,command_args:test args10}, {device_id:VC2,command:3,command_args:test args9}]

C:


由于只能从对象进行反序列化,因此只需先稍微操纵JSON字符串即可。将其包装在对象中:

json = String.Format("{{\"result\":{0}}}", json);

可能的重复不是重复。我的JSON是一个数组。这是一个限制。@user1585345你是什么意思?我为没有正确阅读而道歉-我已经更新了代码!这真的对你有用吗?我得到了正确数量的KVP,但它们有空键和值。我认为这是因为Json.Net不能用Create方法构造它们。最后,我不得不使用一系列单元素词典。
json = String.Format("{{\"result\":{0}}}", json);