C# (JSON.NET)RuntimeBinderException访问动态JObject(在一台电脑上工作,在另一台电脑上失败)

C# (JSON.NET)RuntimeBinderException访问动态JObject(在一台电脑上工作,在另一台电脑上失败),c#,linq,visual-studio,dynamic,json.net,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

我使用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);
但当我的同事运行同一行代码时,他会得到RuntimeBinderException:

“actionData.production”引发了类型为“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”的异常

“Newtonsoft.Json.Linq.JObject”不包含 “生产”

在比较时,我们注意到他没有获得actionData的动态视图:

我的看法是:

他的观点是:

这怎么可能呢

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

我绝对知道我可以避免使用动态对象,而使用真实对象


但我非常好奇这种差异是从哪里来的。

我在VS 2012中也遇到过同样的问题。要解决这个问题,您必须在解决方案中只启用我的代码。 进入工具->选项->调试->常规,点击“仅启用我的代码”框,然后按OK。现在应该可以了


您使用的是相同版本的Json.NET吗?您可以通过执行Debug.WriteLineJson.NET version:+typeofJToken.Assembly.FullName;查看;。我们都有相同的版本7.0.0.0
actionData.production.status = "1";