使用dynamicJsonObject.getDynamicMemberNames()时如何修复RuntimeBinderException

时间:2019-07-03 09:20:27

标签: c# json asp.net-mvc dynamic nullreferenceexception

我在编写此问题时找到了解决方案,但我仍在发布它,以便将来有人遇到此问题时,他们可以找到此问题

此问题与this question有关,因为这是我最近解决问题的尝试。

简而言之:

在我的.Net MVC项目中,我收到一个Json,其中包含一些不可预测的数据(:数组)。我可以使用

对此Json进行解码
dynamic dynamicObj =System.Web.Helpers.Json.Decode(await someAPIcall(someParameters));

而且我可以通过在Visual Studio中将其悬停在数据上来探索数据(尽管它与发送的json相比结构要复杂得多),并且ObjectDumper nuget能够显示所有属性。

现在,如何在代码中访问这些数据?

我尝试了以下方法:

通过链接属性名称(如:

)来访问与任何对象一样的属性
dynamicObj._values[1].Key

,它沿着鼠标放在数据浏览器上的路径(不知道其名称),应该给我一个简单的字符串。但是我得到这个错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform 
runtime binding on a null reference

因此,我尝试查看此对象中的名称是否有所不同,所以我尝试了:

foreach (string name in dynamicObj.getDynamicMemberNames())
{
    Debug.WriteLine(name);
}

这是DynamicJsonObject的方法,但这会引发此错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform 
runtime binding on a null reference

当dynamicBob显然不是null时。

我想念什么?

1 个答案:

答案 0 :(得分:0)

问题是这一行:

dynamic dynamicObj = System.Web.Helpers.Json.Decode(await 
someAPIcall(someParameters)));

应该是这个:

DynamicJsonObject dynamicObj = System.Web.Helpers.Json.Decode(await 
someAPIcall(someParameters));