继承子代c#类中的xml序列化属性
我有以下基类:继承子代c#类中的xml序列化属性,c#,xml,C#,Xml,我有以下基类: [XmlRoot("CruiseLineRequest", IsNullable = false)] public class CruiseLineRequestMessage { [XmlElement(ElementName = "MessageHeader")] public MessageHeaderType MessageHeader { get; set; } } 如您所见,我想调用节点CruiseLineRequest。我现在有一个后代: publ
[XmlRoot("CruiseLineRequest", IsNullable = false)]
public class CruiseLineRequestMessage
{
[XmlElement(ElementName = "MessageHeader")]
public MessageHeaderType MessageHeader { get; set; }
}
如您所见,我想调用节点CruiseLineRequest。我现在有一个后代:
public class DisplayBookingRequestMessage : CruiseLineRequestMessage
{
[XmlElement(ElementName = "DisplayBookingRequest")]
public DisplayBookingRequestType DisplayBookingRequestType { get; set; }
}
[XmlRoot("CruiseLineRequest", IsNullable = false)]
public class DisplayBookingRequestMessage : CruiseLineRequestMessage
{
[XmlElement(ElementName = "DisplayBookingRequest")]
public DisplayBookingRequestType DisplayBookingRequestType { get; set; }
}
但当我序列化时,我得到:
<?xml version="1.0" encoding="utf-16"?>
<DisplayBookingRequestMessage>
<MessageHeader SegmentId="MSGHDR">
</MessageHeader>
<DisplayBookingRequest SegmentId="BKDSP1" />
</DisplayBookingRequestMessage>
我有什么办法可以避免添加
[XmlRoot("CruiseLineRequest", IsNullable = false)]
对于我的所有后代?一种可能的解决方案是使用基类上的属性通知序列化程序派生类,如:
[XmlRoot("CruiseLineRequest", IsNullable = false)]
[XmlInclude(typeof(DisplayBookingRequestMessage))]
public class CruiseLineRequestMessage
{
...
}
然后创建基类类型的序列化程序:
不过,由于我有很多子体,因此在执行序列化时,为了保持类型安全,我更愿意使用子体。所以,虽然这是一个解决方案,但我希望能有更优雅的东西。
XmlSerializer ser3 = new XmlSerializer(typeof(CruiseLineRequestMessage));