我正在 .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
。
那么如何序列化具有所有属性的派生对象?
答案 0 :(得分:1)
这是 System.Text.Json 的一个设计特性,详情请参见 here。您的选择是:
继续使用 JSON.Net
使用其中一种解决方法,在这种情况下,使用 List<object>
或在序列化时转换您的列表。例如:
var json = JsonSerializer.Serialize(cars.Cast<object>());
^^^^^^^^^^^^^^
这个选项的缺点是它仍然不会序列化派生类的任何嵌套属性。