1

我有一个 WCF 客户端,它需要生成包含此 XML 片段的请求:

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

架构由服务器确定,不受我控制。生成的代理代码有一个包含(除其他外)属性nullFlavortypeCode. 代理使用 XmlSerializer。

如何生成这样的片段?xsi:nil仅当相应成员为空时,XmlSerializer 才会发出该属性。如果它为空,它就不能很好地具有将作为属性发出的属性!

顺便说一句,根据 XML Schema Instance 规范,该片段是合法的,该规范说 nil 元素不能包含任何子元素或内部文本,但可以包含属性。

4

2 回答 2

2

这是我为那些仍在努力解决这个问题的人使用的解决方案。这有点像黑客,但它确实有效。关闭 nillable 并添加和属性如下

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
于 2015-12-14T19:30:39.367 回答
1

这是 XmlSerializer 的一个已知限制。您可以通过巧妙地使用 IXmlSerializable 接口并手动发出 XML 来绕过它 - 不幸的是,我所知道的没有一个干净的解决方案。

于 2010-10-27T15:45:50.187 回答