我的几个xml可序列化类型共享相同的属性集,我想将它们重构为一个类型,以删除重复,如下所示。
public class RequestHeader
{
[XmlElement]
public string UserId { get; set; }
[XmlElement]
public string RequestId { get; set; }
}
[XmlRoot]
public class RequestType
{
public RequestHeader Header { get; set; }
// ... other fields ...
}
[XmlRoot]
public class AnotherRequestType
{
public RequestHeader Header { get; set; }
// ... other fields ...
}
当序列化这些类型中的任何一个时,序列化器将Header
属性的内容封装在<Header>
元素中。是否有一个属性可以修饰Header
属性,使父<Header>
元素不呈现?在序列化集合属性时,我已经成功地完成了这一点,但我不确定它是否可以用单个元素完成。
<RequestHeader>
<Header> <!-- omit this -->
<UserId>user</UserId>
<RequestId>123</RequestId>
</Header> <!-- omit this -->
</RequestHeader>
或者,我可以求助于继承或一个元素的集合,但是这两种选择都不能提供一个干净的编程模型。
我会说你在RequestHeader
类上实现IXmlSerializable
,并使用writer手动编写属性,而不将它们包装在一些外部标记中。
为了进一步解决这个问题,我最后引入了一个基类来存储xml可序列化类型的公共元素。在扫描了控制xml序列化的属性集,但没有找到合适的机制之后,我认为这似乎是解决重复问题的唯一机制。