如何在C#中拥有一个类的属性,可以反序列化成任何两种类型的类?

9 浏览
0 Comments

如何在C#中拥有一个类的属性,可以反序列化成任何两种类型的类?

我想在我的类中有一个属性,在.NET 6中可以有两种类型。\n

Class A {
    public string Name {get;set;}
    public int Age {get;set;}
}
Class B {
    public string Name {get;set;}
}
//我希望有以下的一些东西:
Class MyClass{
public  myProperty {get;set;}
}

\nmyProperty可以是来自API响应的任何类型A或B。如何将其反序列化为A或B?有人可以帮忙实现吗?

0
0 Comments

问题的原因是在反序列化过程中,无法访问到MyPropertyContainingAOrB属性中的Age属性。解决方法是将MyPropertyContainingAOrB的类型改为接口类型IHasName,并在需要访问Age属性的时候进行类型转换。

首先,创建一个包含A和B共有属性的接口IHasName:

interface IHasName
{ 
    public string Name { get; set; }
}

然后让A和B类实现该接口:

class A : IHasName
{
    public string Name { get; set; }
    public int Age { get; set; }
} 
// B类也是同样的实现

最后,将MyPropertyContainingAOrB的类型改为接口类型IHasName:

class MyClass
{
    public IHasName MyPropertyContainingAOrB { get; set; }
}

当反序列化到MyClass类时,无法直接访问MyPropertyContainingAOrB中的Age属性。解决方法是,如果确定MyPropertyContainingAOrB包含的是B类型的值,可以进行类型转换:var age = ((B)myClassInstance.MyPropertyContainingAOrB).Age;

0