如何在C#中拥有一个类的属性,可以反序列化成任何两种类型的类?
如何在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?有人可以帮忙实现吗?
问题的原因是在反序列化过程中,无法访问到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;
。