(JSON.NET)RuntimeBinderException访问动态JObject(在一台PC上运行,在另一台PC上运行)

时间:2016-03-10 11:57:48

标签: c# linq visual-studio dynamic json.net

我使用Json.net将json字符串反序列化为动态对象:

var initialJSON = "{ 'artillery': { 'status': '0', 'code': '' }, 'diplomacy': { 'status': '0', 'code': '' }, 'seccheck': { 'status': '0', 'code': '' }, 'march': { 'status': '0', 'code': '' }, 'production': { 'status': '0', 'code': '' }, 'water': { 'status': '0', 'code': '' }, 'technology': { 'status': '0', 'code': '' }, 'spy': { 'status': '0', 'code': '' }, 'weapon': { 'status': '1', 'code': '' }, 'raid': { 'status': '0', 'code': '' }, 'prod_artillery': { 'status': '1', 'code': '' }, 'prod_bio': { 'status': '1', 'code': '' }, 'prod_nuclear': { 'status': '1', 'code': '' }, 'prod_hacking': { 'status': '1', 'code': '' }, 'prod_covops': { 'status': '1', 'code': '' }, 'prod_tank': { 'status': '1', 'code': '' }, 'prod_infantry': { 'status': '1', 'code': '' }, 'prod_fighter': { 'status': '1', 'code': '' }, 'prod_ship': { 'status': '1', 'code': '' }, 'prod_submarine': { 'status': '1', 'code': '' }, 'prod_general': { 'status': '1', 'code': '' }, 'weapon_bio': { 'status': '1', 'code': '' }, 'weapon_nuclear': { 'status': '1', 'code': '' }, 'weapon_covops': { 'status': '1', 'code': '' }, 'weapon_hacking': { 'status': '1', 'code': '' } }";
var actionData = JsonConvert.DeserializeObject<dynamic>(initialJSON);

我和一位同事一起在团队基础服务器项目上工作。 反序列化后,我可以访问这样的属性:

actionData.production.status = "1";

但是当我的同事运行相同的代码行时,他会得到一个RuntimeBinderException:

  

&#39; actionData.production&#39;抛出了类型&#39; Microsoft.CSharp.RuntimeBinder.RuntimeBinderException&#39;动态

     

&#39; Newtonsoft.Json.Linq.JObject&#39;不包含的定义   &#39;生产&#39;

虽然比较我们注意到他没有得到动态视图&#34; on actionData:

我的观点:

actionData with Dynamic View

他的观点:

actionData without Dynamic View

这怎么可能?

我们比较了调试器/异常设置,它们是100%相等。 相同的VS版本,TFS等相同的项目版本。

我完全清楚我可以避免动态并使用真实物体。

但我非常好奇这种差异可能来自哪里。

1 个答案:

答案 0 :(得分:3)

我在VS 2012中遇到了同样的问题。要解决此问题,您必须在解决方案中启用“Just My Code”。 转到工具 - &gt;选项 - &gt;调试 - &gt;一般,然后点击“启用我的代码”框,按确定。现在它可以发挥作用。

Debugging window screen