c# - JsonConvert.DeserializeObject 在一个项目中工作,但在另一个项目中不起作用

标签 c# visual-studio json.net

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

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

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

Exception thrown: 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' in Microsoft.CSharp.dll

Newtonsoft.Json.Linq.JObject does not contain a definition for 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 关键字可能会导致反序列化问题 - 本文对此进行了很好的解释: Anonymous Types are Internal 。这可能是您收到 RuntimeBindingException 的原因。

关于c# - JsonConvert.DeserializeObject 在一个项目中工作,但在另一个项目中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35775121/

相关文章:

c# - 下载文件错误: Cannot convert type

c# - WPF 中的窗口显示事件?

visual-studio - 如何设置 ReSharper 以允许您导航到第三方 DLL 文件并查看源代码行?

c# - 当对象实现 Equals 时,Newtonsoft.Json 序列化表现得很奇怪

c# - MVC 3 Html.DisplayFor(...) 代码不生成 HTML 代码

visual-studio - 使用 Visual Studio 包在 nuget 包中包含构建目录

visual-studio - 截至 2014 年 6 月,Visual Studio 是否已准备好使用 4K 屏幕?

c# - 如何在 .net 中反序列化来自不完整 JSON 的字段?

c# - JsonConvert.DeserializeObject 函数在解析过时的枚举属性时抛出错误

c# - EntityType 'MyProfile' 没有定义键。为此 EntityType 定义键