gpt4 book ai didi

c# - 访问基类重写 ToString 方法中的子类对象

转载 作者:行者123 更新时间:2023-12-04 03:22:12 25 4
gpt4 key购买 nike

我有多个具有不同结构的类。我希望我所有的子类 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> 的通用版本正在调用方法,其中 TResponseBase .您可以通过两种方式解决此问题:

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

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

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

return JsonSerializer.Serialize((object)this);

关于c# - 访问基类重写 ToString 方法中的子类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68315850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com