Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何生成具有属性的xsi:nil元素?_C#_Wcf_Xmlserializer_Xsi_Xml Nil - Fatal编程技术网

C# 如何生成具有属性的xsi:nil元素?

C# 如何生成具有属性的xsi:nil元素?,c#,wcf,xmlserializer,xsi,xml-nil,C#,Wcf,Xmlserializer,Xsi,Xml Nil,我有一个WCF客户端,需要生成包含以下XML片段的请求: <reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" /> 架构由服务器确定,不在我的控制之下。生成的代理代码有一个用于reason元素的类,其中包含属性nullFlavor和typeCode。代理使用XmlSerializer 如何生成这样的片段?只有当对应的成员为null时,XmlSerializer才会发出xsi:nil属性。如果它为null,它就不能很好地具

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

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

架构由服务器确定,不在我的控制之下。生成的代理代码有一个用于reason元素的类,其中包含属性
nullFlavor
typeCode
。代理使用XmlSerializer

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


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

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

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

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

这在简单序列化/反序列化xml消息时非常有用,但嵌入到WCF请求中,这会导致WSDL被视为无效:System.InvalidOperationException:命名空间“”中名为“nil”的架构项“属性”。属性声明的目标命名空间(本地或全局)不得匹配。