能否继承C#记录类型并设置新的XmlRoot属性名称?
关于C#记录类型继承时重写XmlRoot属性的问题
假设我的基记录类型定义如下:
[XmlRoot(ElementName = "meow")] public record MyBaseRecord { // 业务逻辑代码 }
现在我能否继承该记录类型,同时为子类设置新的XmlRoot属性名称,如下所示:
注意:我不希望最终存在两个属性,只保留CuteKitten这个XmlRoot属性。
[XmlRoot(ElementName = "CuteKitten")] public record BabyKittenRecord : MyBaseRecord { // 子类方法逻辑 }
可以这么实现。在C#中,子类标注的[XmlRoot]属性会直接覆盖基类的同名属性,当序列化或反序列化BabyKittenRecord的实例时,只会使用子类指定的CuteKitten作为XML根元素名称,基类的meow配置不会生效。
需要注意一种特殊情况:如果用基类类型的引用指向子类实例(比如MyBaseRecord instance = new BabyKittenRecord();),默认的XmlSerializer会使用基类的XmlRoot名称。要避免这种情况,要么在序列化时明确指定目标类型为BabyKittenRecord,要么在基类上添加[XmlInclude(typeof(BabyKittenRecord))]属性,让序列化器能识别子类类型并应用其XmlRoot配置。
内容的提问来源于stack exchange,提问作者Bohn
相关产品推荐
相关产品推荐

