如何使用属性生成xsi:nil元素?

时间:2010-10-27 14:12:20

标签: c# wcf xmlserializer xsi xml-nil

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

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

架构由服务器确定,不受我的控制。生成的代理代码具有reason元素的类,其中包含(以及其他)属性nullFlavortypeCode。代理使用XmlSerializer。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这是我用于那些仍在努力解决这个问题的人的解决方案。这有点像黑客,但它的工作原理。关闭nillable并添加和属性如下

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