如何解决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
。
那么如何序列化具有所有属性的派生对象?
解决方法
这是 System.Text.Json 的一个设计特性,详情请参见 here。您的选择是:
-
继续使用 JSON.Net
-
使用其中一种解决方法,在这种情况下,使用
List<object>
或在序列化时转换您的列表。例如:var json = JsonSerializer.Serialize(cars.Cast<object>()); ^^^^^^^^^^^^^^
这个选项的缺点是它仍然不会序列化派生类的任何嵌套属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。