JsonConvert.DeserializeObject在一个项目中工作但在另一个项目中不工作

时间:2016-03-03 14:38:11

标签: c# visual-studio json.net

我试图在我的Windows窗体应用程序中反序列化一些Json。我尝试使用的代码与使用不同Json和对象的其他迭代中的代码相同。在试图找出我偶然发现一些非常基本的代码时,我认为我可以应用于我的情况。所以在另一个项目中,我是一个控制台应用程序,我粘贴了以下代码:

string json = @"{'Id': 1, 'Name': 'biofractal'}";
var results = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(results.Id);

这在控制台应用程序中运行良好,但是当我在第一个应用程序中发布它时会导致异常。

  

抛出异常:   &#39; Microsoft.CSharp.RuntimeBinder.RuntimeBinderException&#39;在   Microsoft.CSharp.dll

     

Newtonsoft.Json.Linq.JObject不包含Id

的定义

我多次检查过,并且我使用了完全相同的代码,我确实在文件的开头添加了using Newtonsoft.Json。我已经四处搜索并听说过清除GAC缓存或其他内容,但我似乎无法找到正确的文件。

1 个答案:

答案 0 :(得分:2)

这几乎肯定与使用动态有关。

解决上述问题的最简单方法是不使用动态类型并在代码中定义与JSON匹配的对象,如下所示:

class MyClass {
    public int Id { get; set; }
    public string Name { get; set; }
}

然后使用此类型进行反序列化:

var results = JsonConvert.DeserializeObject<MyClass>(json);

使用匿名类型时,动态关键字可能会导致反序列化问题 - 本文解释得非常好: Anonymous Types are Internal。这可能是您获取RuntimeBindingException的原因。