在基类重写的 ToString 方法中访问子类对象

帕万·诺加里亚

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

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

这样我就为他们得到了一个 json 序列化的字符串。

由于我有多个类并且我想要完全相同的东西,所以我想有一个基类,我可以在其中覆盖该ToString方法,并且它将适用于所有子类,就像这样

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

并有这样的儿童班

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 "{}"

所以基类的重写ToString方法确实被调用,因为我得到了空的 json 字符串“{}”,但它在转换为 json 时不考虑子对象属性。

所以基本上this在这一行,不代表那个时候的子对象而是基础对象

return JsonSerializer.Serialize(this);

所以解决方案不起作用。

有没有办法实现这一目标?ToString在一个地方为多个类覆盖一个方法?

大卫·G

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

使用另一个可让您指定类型的重载:

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

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

return JsonSerializer.Serialize((object)this);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章