任何人都可以告诉我为什么在尝试输出时出现错误" 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有一个" Type"有价值的财产"对象"。
答案 0 :(得分:1)
这是因为JObject的行为与System.Dynamic.ExpandoObject类似。尝试将您的示例更改为:
string Json2 = @"{'Id':1, 'FirstName':'John', 'LastName':'Smith'}";
dynamic dJson2 = JsonConvert.DeserializeObject(Json2);
dJson2.Type = "mynewfield";
Console.WriteLine(dJson2.GetType());
Console.WriteLine(dJson2.Type);
如果你想获得底层类型的属性你需要将它强制转换(到JToken或JObject),否则将在
JObject实现的IDictionary<string, JToken>
。
这个例子可能会有所帮助:
dynamic oobj = new JObject();
oobj.Type = "TEST";
Console.WriteLine(oobj.Type);
Console.WriteLine(((JObject)oobj).Type);