我的一些XML可序列化类型共享相同的一组属性,我想将它们重构为单一类型以删除重复,如下所示。在类型之间共享一组XmlElementAttribute-装饰字段
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>
或者,我可以诉诸继承或一个元素的集合,但这些选项不提供一个干净的编程模型。
不幸的是,'XmlSerializer'在调用'RequestHeader'上的'WriteXml()'之前仍然会发出一个包装元素。我也必须在请求类型上实现'IXmlSerializable',这有点费劲。 –
我明白了。不幸的是,我知道你无法使用属性来控制它。还有一个想法是用继承来替换组合,使得所有其他组件的RequestHeader基类。 –