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

C# 在C中使用Newtonsoft.JSON反序列化JSON字符串#,c#,json,json.net,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 =

我正在努力将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);
}
dynamic response=JsonConvert.DeserializeObject(outputData);
字典区域=新字典();
foreach(响应中的动态温度)
{
添加区域(临时名称,1);
}
outputData
是上面的原始JSON字符串,来自物联网设备

上面的代码可以使我将名称放入dictionary对象,但我也希望捕获数字,即用正确的数字替换1

我尝试了
Temp.Value
Temp.First.Value
这两种方法,其中有以下错误:

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

而不是

Zones.Add(Temp.Name, 1);
你需要

Zones.Add(Temp.Name, (int) Temp.Value);
而不是

Zones.Add(Temp.Name, 1);
你需要

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

您可以直接反序列化到
词典

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

您可以直接反序列化到
字典

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

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

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

PS每次使用
dynamic
,小猫就会死…

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

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

PS每次使用
dynamic
,小猫都会死…

var Zones=JsonConvert.DeserializeObject(outputData)有什么问题?var Zones=JsonConvert.DeserializeObject(outputData)有什么问题?有很多人不应该使用dynamic,这是Fellinicide。很抱歉,小猫们,这段代码是对原始代码的多次编辑,我试图突破每一步,找出出了什么问题,变量名和类型都需要整理。有很多人不应该使用dynamic,但却在使用dynamic。这是一个规模宏大的Felicide。对不起小猫们,这段代码是对原始代码的大量编辑,我试图突破每一步,找出出了什么问题,变量名和类型都需要整理。这也可以,但正如DavidG指出的,我可以完全放弃循环。我从未想过将数字强制转换为int,因为调试输出看起来像是这样做的,即{“Hallway”:2}。是的,尽可能不要使用动态。如果您查看调试器,它会告诉您它是什么类型,即使它看起来像int,也不总是int!这段代码是一个更大项目的一部分,我一直在其他地方使用正确定义的类和变量,但这一点让我很恼火。这也可以工作,但正如DavidG所指出的,我可以完全放弃循环。我从未想过将数字强制转换为int,因为调试输出看起来像是这样做的,即{“Hallway”:2}。是的,尽可能不要使用动态。如果您查看调试器,它会告诉您它是什么类型,即使它看起来像int,也不总是int!这段代码是一个更大项目的一部分,我一直在其他地方使用正确定义的类和变量,但这一点让我很恼火。非常类似于DavidG的答案,感谢回复:)非常类似于DavidG的答案,感谢回复:)