我使用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:
我的观点:
他的观点:
这怎么可能?
我们比较了调试器/异常设置,它们是100%相等。 相同的VS版本,TFS等相同的项目版本。
我完全清楚我可以避免动态并使用真实物体。
但我非常好奇这种差异可能来自哪里。
答案 0 :(得分:3)
我在VS 2012中遇到了同样的问题。要解决此问题,您必须在解决方案中启用“Just My Code”。 转到工具 - &gt;选项 - &gt;调试 - &gt;一般,然后点击“启用我的代码”框,按确定。现在它可以发挥作用。