【发布时间】:2017-04-26 21:37:29
【问题描述】:
考虑这段代码:
JObject obj = JObject.Parse(json);
Dictionary<string,object> dict = new Dictionary<string, object>();
List<string> parameters = new List<string>{"Car", "Truck", "Van"};
foreach (var p in parameters)
{
JToken token = obj.SelectToken(string.Format("$.results[?(@.paramName == '{0}')]['value']", p));
dict[p] = token.Value<object>();
}
string jsonOutput = JsonConvert.SerializeObject(dict);
其中json 部分包含:
{
"paramName": "Car",
"value": 68.107
},
{
"paramName": "Truck",
"value": 48.451
},
{
"paramName": "Van",
"value": 798300
}
在调试时,我检查了字典,发现这些值不是object 类型,而是像integer 和float 这样的实际数字类型。由于字典被声明为Dictionary<string, object> dict = new Dictionary<string, object>();,我希望这些值的类型为object,并且我需要在使用时强制转换它们。
JSON 输出字符串为{"Car":68.107,"Truck":48.451,"Van":798300}。
字典如何知道值的类型,为什么我得到的是实际类型而不是基本类型object?
【问题讨论】:
-
您混淆了运行时类型和编译时类型。你确实需要投射。
-
Debugger 有足够的runtime关于你所质疑的类型的信息,因此能够为你提供流畅的用户体验。真正的类型仍然是
object,正如您所期望的那样。 -
NewtonSoft.Json 框架基于 JSON 模式解释值类型
-
@Nkosi 这里没有架构
-
@DavidG
"value": 68.107是float,"value": "68.107"是String
标签: c# dictionary types json.net .net-4.5