gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:00:45 24 4
gpt4 key购买 nike

我在 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 上找到了这篇 SO 帖子:

Accessing properties of anonymous/dynamic types across dll boundaries gives RuntimeBinderException

但我不想使用 ExpandoObject 类型,我什至不确定它是否适用于我的情况。

更新:好的,我相信我遇到了上面引用 SO 帖子中描述的问题。当 Javascript 回调到我的 C# 应用程序时,调用的上下文是来自 CefSharp 浏览器用户控件的回调。

最佳答案

尝试在没有dynamic 数据类型的情况下工作:

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"];

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

关于c# - 将 JSON 对象反序列化为动态类型但获取 RuntimeBinderException 访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28307146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com