System.Text.Json 序列化派生类属性

时间:2021-01-11 09:18:20

标签: c# json .net system.text.json

我正在 .NET 5 中将项目从 Newtonsoft.Json 迁移到 System.Text.Json

我有课:

abstract class Car
{
    public string Name { get; set; } = "Default Car Name";
}

class Tesla : Car
{
    public string TeslaEngineName { get; set; } = "My Tesla Engine";
}

我试过了:

var cars = new List<Car> 
{ 
    new Tesla(),
    new Tesla(),
    new Tesla()
};

var json = JsonSerializer.Serialize(cars);

Console.WriteLine(json);

输出为:

[
  {"Name":"Default Car Name"},
  {"Name":"Default Car Name"},
  {"Name":"Default Car Name"}
]

丢失了我的财产:TeslaEngineName

那么如何序列化具有所有属性的派生对象?

1 个答案:

答案 0 :(得分:1)

这是 System.Text.Json 的一个设计特性,详情请参见 here。您的选择是:

  1. 继续使用 JSON.Net

  2. 使用其中一种解决方法,在这种情况下,使用 List<object> 或在序列化时转换您的列表。例如:

    var json = JsonSerializer.Serialize(cars.Cast<object>());
                                             ^^^^^^^^^^^^^^
    

    这个选项的缺点是它仍然不会序列化派生类的任何嵌套属性。

相关问题