2011-11-29 33 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基類。 –