在C#中使用Newtonsoft.JSON努力反序列化JSON字符串

时间:2019-09-17 08:34:26

标签: c# json json.net

我正在努力将JSON字符串反序列化为C#中的对象。

有问题的字符串是

{"Hallway":2,"Hot Water":7,"Kitchen":4,"Landing":6,"Living Room":3,"Office":1,"Utility":5}

我当前的代码是:

dynamic response = JsonConvert.DeserializeObject<dynamic>(outputData);

Dictionary<string,int> Zones = new Dictionary<string, int>();
foreach (dynamic Temp in response)
{
    Zones.Add(Temp.Name, 1);
}

outputData是上面的原始JSON字符串,来自IoT设备。

上面的代码可以使我将名称输入到字典对象中,但是我也想捕获该数字,即用正确的数字替换1。

我尝试过Temp.ValueTemp.First.Value这两个错误:

  

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'与'System.Collections.Generic.Dictionary.Add(string,int)'最佳的重载方法匹配'具有一些无效的参数'

3 个答案:

答案 0 :(得分:7)

根本不需要循环或dynamic,您可以直接反序列化为字典:

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

PS每次使用dynamic时,一只小猫都会死亡...

答案 1 :(得分:3)

您可以直接反序列化为Dictionary<string,int>

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

答案 2 :(得分:2)

代替

Zones.Add(Temp.Name, 1);

您需要

Zones.Add(Temp.Name, (int) Temp.Value);