【发布时间】:2016-09-30 22:25:46
【问题描述】:
谁能告诉我为什么在下面的代码中尝试输出“dJson2.Type”时会出错?
string Json1= @"[{'Id':1, 'FirstName':'John', 'LastName':'Smith'}, {'Id':2, 'FirstName':'Jane', 'LastName':'Doe'}]";
dynamic dJson1= JsonConvert.DeserializeObject(Json1);
Console.WriteLine(dJson1.GetType());
Console.WriteLine(dJson1.Type);
string Json2 = @"{'Id':1, 'FirstName':'John', 'LastName':'Smith'}";
dynamic dJson2 = JsonConvert.DeserializeObject(Json2);
Console.WriteLine(dJson2.GetType());
Console.WriteLine(dJson2.Type);
程序在 Console.WriteLine(dJson2.Type) 语句中终止。程序的输出是……
Newtonsoft.Json.Linq.JArray
Array
Newtonsoft.Json.Linq.JObject
(should say Object here, I think)
检查局部变量,dJson2 有一个值为“Object”的“Type”属性。
【问题讨论】:
-
你得到什么错误?
-
是的,错误信息应该会告诉你到底出了什么问题。
-
The call is ambiguous between the following methods or properties: 'System.Console.WriteLine(string, params object[])' -
我在这里在黑暗中拍摄 - 我认为在第一个示例中,编译器足够聪明,可以确定它是一个数组。但在第二个示例中,它正在寻找一个名为
Type的属性,但它并不存在。借用您的代码,只要我在您的 JSON 字符串中明确输入一个名为Type的属性,它就会按预期编译。 -
回答斯坦利/哈维。该错误实际上并没有太大帮助。问题是如果 dJson2 以空值返回,则 Type 属性。例如,您可以在代码中添加“var jType = dJson2.Type”,您会发现 jType 为空。