Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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/0/xml/12.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# xml序列化导致缺少字段_C#_Xml_Web Services_Wcf_Wsdl - Fatal编程技术网

C# xml序列化导致缺少字段

C# xml序列化导致缺少字段,c#,xml,web-services,wcf,wsdl,C#,Xml,Web Services,Wcf,Wsdl,第三方给了我一个wsdl。 这个wsdl是使用MessageContract定义的(很抱歉,在谷歌搜索了很多次之后,我仍然不明白从客户端角度使用MessageContract与ServiceContract有什么区别) 实例化类型为BaseComplex的新复杂对象后,该对象由ComplexA[]和ComplexB[]数组组成,其中ComplexA定义了Decimal和Decimal?属性,然后调用传入BaseComplex类型的服务方法。(很遗憾,由于防火墙的原因,我无法在本地调试服务请求,但

第三方给了我一个wsdl。 这个wsdl是使用MessageContract定义的(很抱歉,在谷歌搜索了很多次之后,我仍然不明白从客户端角度使用MessageContractServiceContract有什么区别)

实例化类型为BaseComplex的新复杂对象后,该对象由ComplexA[]ComplexB[]数组组成,其中ComplexA定义了DecimalDecimal?属性,然后调用传入BaseComplex类型的服务方法。(很遗憾,由于防火墙的原因,我无法在本地调试服务请求,但是,在调用服务之前,我已经验证了BaseComplex.ComplexA.Decimal字段是否有值。)

一旦代码放在服务器上,我的团队就使用WireShark来准确地查看通过网络传输的数据包中的内容。当我们看这个时,ComplexA.Decimal字段被省略了。。。甚至没有空标签

client.SendRequest(BaseComplex)调用和WireShark输出之间,我能想到的唯一一步是.Net framework的Xml序列化。我已经用谷歌搜索了这个问题,但没有发现任何东西能为我指明正确的方向

为什么我的客户机无法正确生成请求xml

几点注意:

  • 我已经将提供给我的wsdl拉入SoapUI,当在服务器上运行时,我们看到了成功的结果。(当运行代码时,我在测试中使用相同的值)
  • 我只是这个wsdl的消费者/客户,对wsdl/服务定义没有控制权
  • 我无法真正理解为什么服务是使用消息契约而不是服务契约来完成的。。。(我以前在ServiceContract中从未遇到过这个问题)
  • 这个问题最有趣的一个方面是ComplexBase定义了一个Decimal字段,并且该字段被正确序列化。也就是说,Request.DecimalProperty序列化,但Request.ComplexA.DecimalProperty不序列化
  • 其他一些注意事项是,这只是ComplexA类型中的Decimal和可为空的Decimal字段的问题ComplexA.DecimalPropertyComplexA.NullableDecimalProperty无法序列化

非常感谢您的任何帮助。请询问是否有必要提供一个样本(我没有在这篇文章中包括,因为出于安全原因,它需要被屏蔽)

所以,我已经解决了这个问题。 wsdl定义的对象具有十进制和可为空的十进制以及定义为DecimalFieldDisspecified的bool。出于某些不正当的原因,有必要手动将这些设置为true,以便xmlserializer提取字段