gpt4 book ai didi

c# - 将 JSON 字符串解析为 DynamicJsonObject 的机器特定 (??) 行为

转载 作者:行者123 更新时间:2023-12-03 02:20:50 26 4
gpt4 key购买 nike

我有一段代码可以在没有调试器的情况下按预期运行,但是当我在调试器下运行它时,它在一台机器上运行,在另一台机器上失败。两台机器的设置几乎相同:Windows 8、.NET Framework 4.5、Visual Studio 2013 Ultimate Update 4,我在两台机器上运行相同的控制台应用程序。

代码解析包含 JSON 的字符串:

{"success":true,"doAlternative":false,"errors":null,"content":null}

使用 System.Web.Helpers 转换为动态对象:

dynamic result = Json.Decode(jsonString);

然后我访问结果对象的 success 字段:

if ( result.success != true )

在一台机器上(我提醒:问题是在调试器下运行时),这可以正常工作。另一方面,我得到 RuntimeBinderException:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException occurred
_HResult=-2146233088
_message='System.Web.Helpers.DynamicJsonObject' does not contain a definition for 'success'
HResult=-2146233088
IsTransient=false
Message='System.Web.Helpers.DynamicJsonObject' does not contain a definition for 'success'
Source=Microsoft.CSharp
StackTrace:
at Microsoft.CSharp.RuntimeBinder.RuntimeBinderController.SubmitError(CError pError)
InnerException:

在“工作”机器上,当我在“立即”窗口中输入结果时,我得到:

{System.Web.Helpers.DynamicJsonObject}
base: {System.Web.Helpers.DynamicJsonObject}

在“失败”的机器上,我得到这个:

{System.Web.Helpers.DynamicJsonObject}
base: {System.Web.Helpers.DynamicJsonObject}
_values: Count = 4

这里是最奇怪的一点:在故障机器上的立即窗口中播放,第一次输入 result["success"] 会给出以下结果:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException occurred
_HResult=-2146233088
_message=Cannot apply indexing with [] to an expression of type 'System.Web.Helpers.DynamicJsonObject'
HResult=-2146233088
IsTransient=false
Message=Cannot apply indexing with [] to an expression of type 'System.Web.Helpers.DynamicJsonObject'
Source=Microsoft.CSharp
StackTrace:
at Microsoft.CSharp.RuntimeBinder.RuntimeBinderController.SubmitError(CError pError)
InnerException:

然后,第二次再次输入 result["success"],就可以了!然后 result.success 也可以工作。它不会打扰我,但如果我不放置断点并仅使用 F5 运行应用程序,它就会失败。

这种机器调试器特定的行为令人恐惧 - 我担心将代码放入生产中会出现此类问题,(目前仅在调试器下观察到,但谁知道......?)有人可以摆脱吗有什么线索吗?

最佳答案

好的,我找到原因了 - here .

转到“工具”>“选项”>“调试”并检查“仅启用我的代码”可有效解决该问题。

该复选框正是两种环境之间的区别。尝试在“工作”机器上取消选中它,并在那里得到相同的异常,因此我可以确认此行为是稳定且一致的(现在我很高兴)。

因此,问题只是调试器尝试跟踪正在调试的代码并读取动态对象的成员,而这些成员是创建动态对象的程序集的内部成员。这就是它在调试器下失败的原因,也是它在没有调试器的情况下运行时工作的原因。

关于c# - 将 JSON 字符串解析为 DynamicJsonObject 的机器特定 (??) 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537451/

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