2010-10-27 87 views
1

我有一個WCF客戶端需要生成一個包含這個XML片段的請求:如何用屬性生成xsi:nil元素?

<reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" /> 

的模式是由服務器來決定,而不是我的控制之下。生成的代理代碼具有包含(除其他之外)屬性nullFlavortypeCode的reason元素的類。該代理使用XmlSerializer。

如何生成這樣的片段?僅當相應的成員爲空時,XmlSerializer纔會發出xsi:nil屬性。如果它是空的,它不能很好地具有將作爲屬性發射的屬性!

順便說一句,該片段是根據XML架構實例規範合法的,該規範說nil元素不能包含任何子元素或內部文本,但可能包含屬性。

回答

1

這是XmlSerializer的已知限制。您可以通過巧妙使用IXmlSerializable接口並手動發佈XML來解決這個問題 - 但遺憾的是,並不存在我所知道的乾淨解決方案。

0

下面是我用於解決這個問題的解決方案。這有點黑客,但它的作品。關閉的nillable和添加和屬性如下

[XmlAttributeAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")] 
public bool NillAtt 
{ 
    get 
    { 
     return this.nillAtt; 
    } 
    set 
    { 
     nillAtt = value; 
    } 
} 
+0

這就像一個魅力時,只需序列化/反序列化XML消息,而是嵌入在WCF的請求,這將導致WSDL被視爲無效信息:System.InvalidOperationException:架構項目從命名空間'http://www.w3.org/2001/XMLSchema-instance'命名爲'nil'的'屬性'。屬性聲明的目標名稱空間無論是本地還是全局,都不得與http://www.w3.org/2001/XMLSchema-instance匹配。 – oerkelens 2016-04-15 10:33:18

相關問題