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



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

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

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

引发的异常: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.竖琴.dll

Newtonsoft.Json.Linq.JObject 不包含 Id 的定义

检查了多次,我使用的是完全相同的代码,并且确实在文件的开头添加了using Newtonsoft.Json。我四处搜索并听到提到清除 GAC 缓存或类似的东西,但我似乎找不到正确的文件。

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

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

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

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

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

使用匿名类型时,dynamic 关键字可能会导致反序列化问题 - 本文很好地解释了它:匿名类型是内部类型。这可能是您获得 RuntimeBindingException 的原因。

相关内容

  • 没有找到相关文章

最新更新