You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否继承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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 17:46:05