Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继承子代c#类中的xml序列化属性_C#_Xml - Fatal编程技术网

继承子代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));