在基础 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>
方法的通用版本,其中 T
是 ResponseBase
。您可以通过两种方式解决此问题:
使用另一个允许您指定类型的重载:
return JsonSerializer.Serialize(this, this.GetType());
将值转换为 object
,以便它调用非泛型重载:
return JsonSerializer.Serialize((object)this);
我有多个具有不同结构的 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>
方法的通用版本,其中 T
是 ResponseBase
。您可以通过两种方式解决此问题:
使用另一个允许您指定类型的重载:
return JsonSerializer.Serialize(this, this.GetType());
将值转换为 object
,以便它调用非泛型重载:
return JsonSerializer.Serialize((object)this);