我的一些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>
或者,我可以使用继承或具有一个元素的集合,但这些选项中的任何一个都不提供干净的编程模型。
答案 0 :(得分:0)
我会说你在IXmlSerializable
类上实现RequestHeader
并使用writer手动编写属性,而不将它们包装在某个外部标记中。
答案 1 :(得分:0)
为了跟进这个问题,我最后介绍了一个基类来存储我的XML可序列化类型的公共元素。在扫描控制XML-serializaion的一组属性,而没有找到合适的机制之后,我得出结论,这似乎是解决重复问题的唯一机制。