C# 从超类访问子类的类型

C# 从超类访问子类的类型,c#,.net,oop,C#,.net,Oop,我有一个超类,MySuperclass,还有两个子类MySuperclassMySubclass1和MySubclass2。我希望能够调用依赖于子类类型的实例方法 例如,我希望能够在MySuperclass的子类的任何实例上调用MySubclass.Serialize(),并让它在该对象上调用Json.SerializeToBytes(T toSerialize),适当地替换T 公共类MySuperclass { //当然,这是行不通的。 公共字节[]序列化为字节() =>Json.Serial

我有一个超类,
MySuperclass
,还有两个子类
MySuperclass
MySubclass1
MySubclass2
。我希望能够调用依赖于子类类型的实例方法

例如,我希望能够在
MySuperclass
的子类的任何实例上调用
MySubclass.Serialize()
,并让它在该对象上调用
Json.SerializeToBytes(T toSerialize)
,适当地替换
T

公共类MySuperclass
{
//当然,这是行不通的。
公共字节[]序列化为字节()
=>Json.SerializeToBytes(这);
}
公共类MySubclass1:MySuperclass
{
...
}
公共类MySubclass2:MySuperclass
{
...
}
然后我可以做:

byte[]字节;
var mysubclassobject=new MySubClass1();
bytes=mySubClassObject.SerializeToBytes();
//上述内容相当于(尽管类型参数通常是隐含的)
bytes=Json.SerializeToBytes(mySubClassObject);
我怎样才能做到这一点


根据注释的请求,我使用的库是Utf8Json库。Json.SerializeToBytes(T toSerialize)定义为:**

公共静态字节[]序列化为字节(T obj)
{
返回JsonSerializer.Serialize(obj);
}
脚注 *我找到了。但这并没有回答我的问题。在这种情况下,它们可以仅使用超类的类型引用子类,但在这里,序列化程序需要访问子类及其所有额外的方法和属性来正确序列化它。它们也没有将类型作为类型参数传递给某个方法,我需要这样做

**我希望它也能用于其他情况,在这种情况下,我可以从超类中定义的方法访问子类的类型


我不想使用
重写
,因为这需要我为每个子类重写
.Serialize()
方法

,感谢@Charlieface提供了指向的链接

此实现有效,您需要强制转换到
T

公共类MySuperclass其中T:MySuperclass
{
公共字节[]序列化为字节()
=>Json.SerializeToBytes((T)this);
}
公共类MySubclass1:MySuperclass
{
...
}

这是否回答了您的问题?顺便提一下,
Json.SerializeToBytes
使用反射,以便可以看到已传递的实际对象类型in@Charlieface您链接的问题中的解决方案是否不需要我为每个子类创建一个新方法,覆盖超类的方法?我这样做是为了避免自己为大约20个类编写
.Serialize()
。您可能会觉得有趣。您希望将基类genricize为
MySuperclass,其中T:MySuperclass
看起来很疯狂,但很有效。然后可以在基类中声明
string Serialize
,也可以传递
this.GetType()
并使用非泛型重载
Serialize
。不需要使用任何递归泛型,特别是因为您只希望它用于一个目的。换句话说,SerializeToBytes方法也可以是非泛型的
JsonSerializer.Serialize(obj,obj.GetType())