我有多个具有不同结构的类。我希望我所有的子类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
在一个地方为多个类覆盖一个方法?
问题是JsonSerializer.Serialize<T>
正在调用通用版本的方法,其中T
是ResponseBase
. 您可以通过两种方式解决此问题:
使用另一个可让您指定类型的重载:
return JsonSerializer.Serialize(this, this.GetType());
将值转换为object
它调用非泛型重载:
return JsonSerializer.Serialize((object)this);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句