我正在努力将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.Value
和Temp.First.Value
这两个错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'与'System.Collections.Generic.Dictionary.Add(string,int)'最佳的重载方法匹配'具有一些无效的参数'
答案 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);