我正在尝试建立一个读取器,它将从各种网站中获取JSON对象(想想信息抓取)并将它们转换为C#对象.我目前正在使用JSON.NET进行反序列化过程.我遇到的问题是它不知道如何处理类中的接口级属性.所以有些本质:
public IThingy Thing
Run Code Online (Sandbox Code Playgroud)
会产生错误:
无法创建IThingy类型的实例.Type是接口或抽象类,无法实例化.
让它成为ITINGy而不是Thingy是相对重要的,因为我正在处理的代码被认为是敏感的,单元测试非常重要.对于像Thingy这样的完全成熟的对象,不可能对原子测试脚本的对象进行模拟.它们必须是一个接口.
我一直在研究JSON.NET的文档已有一段时间了,我在这个网站上找到的与此相关的问题都来自一年多以前.有帮助吗?
此外,如果重要,我的应用程序是用.NET 4.0编写的.
我尝试从 Newtonsoft.Json 迁移到 System.Text.Json。我想反序列化抽象类。Newtonsoft.Json 为此具有 TypeNameHandling。有没有办法通过.net core 3.0 上的 System.Text.Json 反序列化抽象类?
注意:我正在使用 Microsoft 的新产品
System.Text.Json,Json.NET因此请确保答案相应地解决了这个问题。
考虑这些简单的 POCO:
interface Vehicle {}
class Car : Vehicle {
string make { get; set; }
int numberOfDoors { get; set; }
}
class Bicycle : Vehicle {
int frontGears { get; set; }
int backGears { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
汽车可以像这样用 JSON 表示......
{
"make": "Smart",
"numberOfDoors": 2
}
Run Code Online (Sandbox Code Playgroud)
自行车可以这样表示......
{
"frontGears": 3,
"backGears": 6
}
Run Code Online (Sandbox Code Playgroud)
很直接。现在考虑这个 JSON。
[
{
"Car": {
"make": "Smart",
"numberOfDoors": 2
}
},
{
"Car": {
"make": …Run Code Online (Sandbox Code Playgroud)