在类型之间共享一组XmlElementAttribute修饰的字段

时间:2011-11-29 21:54:44

标签: c# .net xml-serialization

我的一些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>

或者,我可以使用继承或具有一个元素的集合,但这些选项中的任何一个都不提供干净的编程模型。

2 个答案:

答案 0 :(得分:0)

我会说你在IXmlSerializable类上实现RequestHeader并使用writer手动编写属性,而不将它们包装在某个外部标记中。

答案 1 :(得分:0)

为了跟进这个问题,我最后介绍了一个基类来存储我的XML可序列化类型的公共元素。在扫描控制XML-serializaion的一组属性,而没有找到合适的机制之后,我得出结论,这似乎是解决重复问题的唯一机制。