【发布时间】:2021-07-05 11:04:34
【问题描述】:
我有一个作为 nuget 包分发的 .Net Standart 类库项目。 当我将此包用于 Asp.Net Core 项目时,我得到一个内部异常(与 Newtonsoft Json 相关),而在 .Net Winform 应用程序中使用相同的包和相同的代码工作得很好。 引发异常的方法的.Net标准代码是:
var jsonString = File.ReadAllText(jsonFilePath);
dynamic jResult = JsonConvert.DeserializeObject(jsonString);
foreach (dynamic feature in jResult.features)
{
...
}
例外情况是: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“Newtonsoft.Json.Linq.JObject”不包含“功能”的定义
当然,我阅读的 json 文件具有其“功能”属性,并且对于两个项目来说都是相同的 Json 文件。此代码使用相同的 Json 文件通过单元测试进行测试。
【问题讨论】:
-
您有一个错误,可能是大小写错误。该字符串没有
features属性。 JSON 区分大小写,因此features不会匹配Features。这与 .NET Standard 毫无关系。 .NET Core 中的所有 NuGet 包都是 .NET Standard。发布 JSON 字符串。 -
same package and same code in a .Net Winform application works just fine但 string 是否相同? JSON.NET 和 .NET Core 都不是新的。在过去的 5 年中,这两种方法都被数十万开发人员使用。 JSON.NET 是自第一个版本以来 ASP.NET Core 中的默认序列化程序。如果存在这样的问题,人们会在几年前注意到并修复它 -
Json 文件是两个项目的相同 Json 文件。并且此代码使用相同的 Json 文件通过单元测试进行了测试。
-
如果序列化程序设置正确,
Features(大写的 F)也可以工作。但最终,每次你使用dynamic,都会有一只小猫死去。不要这样做,使用具体的类。 -
@PanagiotisKanavos 是的,我刚刚检查过,它需要是 10 岁以上的 v3.x,哎呀。
标签: c# asp.net-core json.net .net-standard