提问人:Pawan Nogariya 提问时间:7/9/2021 更新时间:7/9/2021 访问量:522
访问基类重写 ToString 方法中的子类对象
Access child class object in base class overridden ToString method
问:
我有多个结构不同的类。我希望像这样覆盖我所有的子类方法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 "{}"
因此,基类的重写方法确实被调用,因为我得到了空的 json 字符串“{}”,但它在转换为 json 时不考虑子对象属性。ToString
所以基本上在这一行中,不代表当时的子对象,而是代表基本对象this
return JsonSerializer.Serialize(this);
所以解决方案不起作用。
有什么方法可以做到这一点吗?在一个地方为多个类重写一个方法?ToString
答:
3赞
DavidG
7/9/2021
#1
问题是正在调用方法的通用版本,其中是 .您可以通过两种方式解决此问题:JsonSerializer.Serialize<T>
T
ResponseBase
使用另一个重载,用于指定类型:
return JsonSerializer.Serialize(this, this.GetType());
将值转换为,以便它调用非泛型重载:object
return JsonSerializer.Serialize((object)this);
上一个:C# 简单链表中的“this”
下一个:此关键字无法访问对象字段
评论