JsonSerializer.Serialize 只序列化基类的属性

Cbs*_*sch 6 c# .net-core

我想要一个基类,ToString通过将继承它的任何对象转换为 JSON 来覆盖。运行该程序时,似乎this在上下文中基础对象不是完整的对象,而只是基础对象本身。

是否可以从基础对象引用继承的对象?

using System;
using System.Text.Json;

namespace Test
{
    public class BaseModel 
    {
        public override string ToString() 
        {
            return JsonSerializer.Serialize(this);
        }
    }

    public class Data : BaseModel 
    {
        public string Name { get; set; }
        public int Value { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var data = new Data { Name = "Test", Value = 42 };
            Console.WriteLine(data);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Hei*_*nzi 10

发生这种情况是因为JsonSerialize.Serialize<TValue>(TValue, [JsonSerializerOptions])是一个泛型方法,并且由于类型干扰,您的代码被编译为:

public override string ToString() 
{
    return JsonSerializer.Serialize<BaseModel>(this);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,解决方案是使用非泛型重载JsonSerialize.Serialize(object, Type, [JsonSerializerOptions])

public override string ToString() 
{
    return JsonSerializer.Serialize(this, this.GetType());
}
Run Code Online (Sandbox Code Playgroud)