在基础 class 覆盖的 ToString 方法中访问 child class object

Access child class object in base class overridden ToString method

我有多个具有不同结构的 classes。我希望我所有的 child classes ToString 方法都像这样被覆盖

public override string ToString()
{
    return JsonSerializer.Serialize(this);
}

这样我就可以得到一个 json 序列化的字符串。

因为我有多个 classes 并且我想要完全相同的东西,所以我想有一个基础 class 我可以在其中重写 ToString 方法,它将适用于所有子 classes,像这样

public class ResponseBase
{
    public override string ToString()
    {
        return JsonSerializer.Serialize(this);
    }
}

并有 child class 像这样

public class Response_1: ResponseBase
{
    public string Name {get;set;}
}

但是当我尝试这样做时,

Response_1 r = new Response_1();
r.Name = "Test";
var json = r.ToString(); // has empty json object "{}"

所以基本 class' 覆盖的 ToString 方法确实被调用,因为我得到空 json 字符串“{}”,但它不考虑 child object 属性 转换为 json.

所以基本上this这一行,不代表那个时代的childobject而是基础object

return JsonSerializer.Serialize(this);

所以解决方案不起作用。

有什么办法可以实现吗?要在一个地方为多个 class 重写 ToString 方法?

问题是正在调用 JsonSerializer.Serialize<T> 方法的通用版本,其中 TResponseBase。您可以通过两种方式解决此问题:

使用另一个允许您指定类型的重载:

return JsonSerializer.Serialize(this, this.GetType());

将值转换为 object,以便它调用非泛型重载:

return JsonSerializer.Serialize((object)this);