我有下面的代码
using System;
using System.Collections.Generic;
using System.Text.Json;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
var shapes = new List<Shape>();
shapes.Add(new Circle { Name = "Circle1", Diameter = 2.0});
shapes.Add(new Circle { Name = "Circle2", Diameter = 2.0});
shapes.Add(new Rectangle { Name = "Rect1", Length = 2.0});
shapes.Add(new Rectangle { Name = "Rect2", Length = 2.0});
var serialized = JsonSerializer.Serialize(shapes);
Console.WriteLine(serialized);
}
public abstract class Shape
{
public string Name { get;set;}
}
public class Circle:Shape
{
public double Diameter { get;set;}
}
public class Rectangle:Shape
{
public double Length {get;set;}
}
}
当序列化时,我丢失了矩形和圆形的属性,只从Shape中得到了它们。
这是一个
[{"名称":"圆1 "},{"名称":"圆2 "},{"名称":"矩形1 "},{"名称":"矩形2 "}]
这是预料之中的,假定序列化器认为它们都是"Shape",我怎样才能使它足够智能地序列化到适当的子类
1条答案
按热度按时间ajsxfq5m1#
如果更改基类,可以使代码简单得多
在这种情况下,你可以用更简单和安全的方式初始化对象。2我也推荐使用Newtonsoft.Json。3它会让你的生活更轻松
结果
测验
试验结果