2011-11-29 34 views
1

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

或者,我可以诉诸继承或一个元素的集合,但这些选项不提供一个干净的编程模型。

回答

0

为了跟进这个问题,我最终介绍了一个基类来存储我的XML序列化类型的常见元素。在扫描控制XML序列化的一组属性之后,我没有找到合适的机制,我认为这似乎是解决重复问题的唯一机制。

0

我会说你执行IXmlSerializableRequestHeader类和手动写入属性使用写入器,没有包装在一些外部标签。

+0

不幸的是,'XmlSerializer'在调用'RequestHeader'上的'WriteXml()'之前仍然会发出一个包装元素。我也必须在请求类型上实现'IXmlSerializable',这有点费劲。 –

+1

我明白了。不幸的是,我知道你无法使用属性来控制它。还有一个想法是用继承来替换组合,使得所有其他组件的RequestHeader基类。 –