C# 将JSON对象反序列化为动态类型,但获取RuntimeBinderException访问属性?

C# 将JSON对象反序列化为动态类型,但获取RuntimeBinderException访问属性?,c#,dynamic,json.net,json-deserialization,C#,Dynamic,Json.net,Json Deserialization,我在C#Windows窗体应用程序中使用JSON.net将JSON字符串反序列化为动态对象: dynamic jsonObj = JsonConvert.DeserializeObject(strJson); 我使用以下测试JSON进行测试: {"payload":"thePayload","number":3,"dialogResult":"one"} 运行代码时,我确实可以使用关联数组方法访问动态对象的属性: var x = jsonObj["payload"]; 但是,如果我尝试使用

我在C#Windows窗体应用程序中使用JSON.net将JSON字符串反序列化为动态对象:

dynamic jsonObj = JsonConvert.DeserializeObject(strJson);
我使用以下测试JSON进行测试:

{"payload":"thePayload","number":3,"dialogResult":"one"}
运行代码时,我确实可以使用关联数组方法访问动态对象的属性:

var x = jsonObj["payload"];
但是,如果我尝试使用属性名访问内容:

var x = jsonObj.payload;
它可以工作,但我得到以下例外:

A first chance exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Microsoft.CSharp.dll
是否有一种方法可以更改内容,这样我就可以使用属性名而不是关联数组访问动态对象中的反序列化内容,而不会出现异常

我在RutimeBinderExceptions上发现了这篇文章:

但是我不喜欢使用ExpandooObject类型,我甚至不确定它是否适用于我的情况


更新:好的,我相信我在上面的参考文章中描述了这个问题。调用的上下文是当Javascript调用回我的C#app时来自CefSharp浏览器用户控件的回调。

尝试在不使用
动态
数据类型的情况下工作:

Dictionary<string, object> theData= new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(jsonString);

string payload = (string)theData["payload"];
int number = (int)theData["number"];
string dialogResult = (string)theData["dialogResult"];
Dictionary theData=newJavaScriptSerializer()。反序列化(jsonString);
字符串有效载荷=(字符串)数据[“有效载荷”];
整数=(整数)数据[“数字”];
字符串dialogResult=(字符串)数据[“dialogResult”];

对Deserialize()的调用创建了一个字典树,您可以随意遍历它。

在这里工作得很好,您使用的是Json.Net的哪个版本?如果使用
JObject.Parse
,会发生什么情况?@Ofiris同样的事情也会发生在JObject.Parse上。请参阅我的帖子的最新更新。我相信这与跨境问题有关。