- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么这段代码会抛出 RuntimeBinderException?我该如何解决这个问题?为什么我不能在 catch block 中捕获这个异常?
如果我使用 System.Web.Helpers.Json.Decode(response) 解析 json 字符串,也会出现同样的错误。
using Microsoft.CSharp.RuntimeBinder;
using Newtonsoft.Json;
using System;
using System.Windows;
namespace DynamicDemo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
try
{
String response = "{ \"data\":{ \"accountId\":\"YOUR_ACCOUNT_ID\"},\"message\":null}";
dynamic obj = JsonConvert.DeserializeObject(response);
String account = obj.data.accountId;
Console.WriteLine(account);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
输出...
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero2\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.Aero2.dll'. Symbols loaded.
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll'. Symbols loaded.
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Dynamic\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Dynamic.dll'. Symbols loaded.
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'Anonymously Hosted DynamicMethods Assembly'.
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll
YOUR_ACCOUNT_ID
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CLIENTDIAGNOSTICS\XAMLDIAGNOSTICS\x86\WpfXamlDiagnosticsTap.dll'. Symbols loaded.
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'C:\Windows\assembly\GAC\Microsoft.VisualStudio.OLE.Interop\7.1.40304.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.OLE.Interop.dll'. Module was built without symbols.
'DynamicDemo.vshost.exe' (CLR v4.0.30319: DynamicDemo.vshost.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll'. Symbols loaded.
更新1:更改了异常处理程序以捕获所有异常,但这没有什么区别
最佳答案
这完全正常。通过强制调试器在第一次出现异常时停止,您可以看到一些内容。您可能已经意外打开了该选项。
所有这些都是准确的。您看到 DLR 正在寻找找回属性(property)的可能方法。所有明显的方法都不起作用,在第二次尝试后,它尝试了 IDictionary<string, JToken>
JObject 实现的接口(interface)。几乎已经完成,只是 JToken 值需要进行强制转换。第四次尝试很好。
除了这些异常的成本之外,您没有遇到真正的问题。这是严格限制的,您可以再次调用 JsonConvert.DeserializeObject() 并注意您现在没有得到异常。 DLR 已经记住了最佳策略。
一切都按其应有的方式进行。
关于c# - 为什么动态对象的赋值会抛出 RuntimeBinderException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703783/
我收到以下错误: 'object' does not contain a definition for 'RatingName' 当您查看匿名动态类型时,它显然具有RatingName。 我意识到我可
为什么这段代码会抛出 RuntimeBinderException?我该如何解决这个问题?为什么我不能在 catch block 中捕获这个异常? 如果我使用 System.Web.Helpers.J
我正在使用 ExpandoObject 初始化动态并向其中添加一些项目。 dynamic dy = new System.Dynamic.ExpandoObject();
我想拦截对动态类型的调用,以避免在调用的方法或属性不存在时出现 RuntimeBinderException。例如: class Foo { bool IsFool{ get; set; }
我觉得我在这里遗漏了一些明显的东西,请随时向我指出。 我有一个简单的单元测试来说明我的问题: [Test] public void DynamicTest() {
我收到一个带有消息的 RuntimeBinderException Cannot implicitly convert type 'object' to 'MyNamespace.SomeEnum?'
代码 我有一个 MVC 项目,其中的部分页面看起来有点像这样: " %> " data-window-url="/SomeUrl/Partial//" > 它所做的是打开
我最近开始使用私有(private) NuGet 服务器来管理我组织的内部库。这意味着为了进入库中我们自己的代码,我需要在调试选项中禁用“仅启用我的代码”,因为我们不再直接引用项目。这是一个非常庞大的
刚因为这个开了一个账户。 我在 Visual Studio 上创建了一个空的 Web 项目(没有 MVC、Forms 或 Web API),并且在调试这一行时: @if (Session["GenCp
我在 MyLibrary1 中有一个返回动态对象的静态方法。 public static dynamic GetObjects() { return new { test = "something"
对于 _Layout.cshtml 中使用的 Viewbag 项,我们会收到 RuntimeBinderException。我们在内存分析器中观察到这些异常。它们不是致命的(一切正常)但很烦人,我们想
我正在使用 dynamic 关键字来处理外部程序集,就访问它的方法和原始类型成员而言,它工作正常。因此,例如我的类动态加载的类如下所示: public class Student { publ
我正在使用 Newtonsoft.Json 反序列化我的 JSON。这是我的 JSON 字符串。 { "data": { "type": "records",
我正面临一个非常奇怪的行为 ValueTuple从另一个程序集传递,使用 dynamic 访问.此代码在特定情况下抛出 RuntimeBinderException在最后一行: TupleTest(o
我在学习/修改 asp.net 时遇到了一个奇怪的异常现象。 我正在尝试显示这样的局部 View : @Html.Partial("_PartialView", new { Action = "Foo
我有一个方便的实用程序方法,它获取代码并吐出内存中的程序集。 (它使用 CSharpCodeProvider,虽然我认为这无关紧要。)这个程序集与任何其他带有反射的程序集一样工作,但是当与 dynam
我在 C# 中有一个标准的“动态字典”类型类 - class Bucket : DynamicObject { readonly Dictionary m_dict = new Diction
我在 C# Windows 窗体应用程序中使用 JSON.net 将 JSON 字符串反序列化为动态对象: dynamic jsonObj = JsonConvert.DeserializeObjec
我使用 ASPX 启动了一个默认 MVC 4 项目引擎(不是 Razor),一切正常。 我可以用 和 用于书籍评级(而不是在 asp.net/mvc 教程站点上出现的 Restaurant Rev
以下 C# 在第 2 行导致 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。 dynamic element = JsonConvert.
我是一名优秀的程序员,十分优秀!