Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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/9/solr/3.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#WS客户端避免空值序列化_C#_Web Services_Soap_Cxf - Fatal编程技术网

C#WS客户端避免空值序列化

C#WS客户端避免空值序列化,c#,web-services,soap,cxf,C#,Web Services,Soap,Cxf,我对通过“添加新服务引用”选项自动创建的SOAP webclient有问题。 服务是从JAVA-CXF生成的,在我的代理类中,它具有如下签名: public generatedClassResponse search (string p1, long p2); p2参数是可选的,所以我需要修改我的类。我把字体改成了long?现在,我从服务接收到一个错误:序列化“”值时出现解组错误 我的请求自动生成的类是: public class searchRequest {

我对通过“添加新服务引用”选项自动创建的SOAP webclient有问题。 服务是从JAVA-CXF生成的,在我的代理类中,它具有如下签名:

            public generatedClassResponse search (string p1, long p2);
p2参数是可选的,所以我需要修改我的类。我把字体改成了long?现在,我从服务接收到一个错误:序列化“”值时出现解组错误

我的请求自动生成的类是:

public class searchRequest {
   //omitted non param const

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    [System.ServiceModel.MessageContractAttribute(WrapperName="searchEvents", WrapperNamespace="http://test.com/", IsWrapped=true)]

    public searchRequest (string p1, long? p2) { //p2 type modified
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://test.com/", Order=0)]
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string P1 

        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://test.com/", Order=1)]
        [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public long2? P2
   }
}
通过调试,我可以看到我的SOAP xml请求是(省略SOAP标记):


废话
所以,服务器正在接收该元素的“”值,但我想从请求XML中删除该元素

我还有一个类搜索,它包含在我的接口代理类的knowntypes中,但对它的修改没有效果(显然)

编辑: 该类同时具有私有long P2属性和私有bool P2指定属性,但我的代理类没有将搜索类作为参数传递的方法,而只有一个具有searchRequest类param的方法

我在我的类中测试了ShouldSerializeP2(),在这两个类中都测试了P2指定的属性,但我无法避免生成P2标记

有什么想法吗?
非常感谢。

通常,当您生成具有不可为空的C#类型的可选字段(如“long”)的代理时,代理生成器会生成一个附加的布尔值,该布尔值的字段名后缀为“IsSpecified”。在您的情况下,这将是“P2IsSpecified”。如果没有,那么检查WSDL以确保该字段确实是可选的。事实上,该字段是可选的。正如我所编辑的,还有第二个类,它具有P2IsSpecified属性,但我无法向该类传递参数。我如何使用它呢?为什么有两个Order=0的属性?可能是这导致了错误。对不起,是打字错误。顺序值为0和1。
<search>
    <P1>blah</P1>
    <P2 xsi:nill="true"></P2>
</search>