我的一些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基類。 –