xml序列化导致缺少字段
本文关键字:字段 序列化 xml | 更新日期: 2023-09-27 18:22:51
第三方向我提供了wsdl。这个wsdl是使用MessageContract定义的(很抱歉,在谷歌上搜索了很多之后,我仍然不明白从客户端的角度使用MessageContract与ServiceContract有什么区别)
在实例化类型为BaseComplex的新复杂对象后,该对象由ComplexA[]和ComplexB[]的数组组成,其中ComplexA具有Decimal和Decimal属性,然后调用传入BaseComplex类型的服务方法。(很遗憾,由于防火墙的原因,我无法在本地调试服务请求,但是,在调用服务之前,我已经验证了BaseComplexA.Decimal字段是否有值。)
一旦代码被放在服务器上,我的团队就使用WireShark来准确地查看数据包中的内容。当我们看到这一点时,ComplexA.Decimal字段被省略了。。。甚至连空标签都没有。
我能想到的在客户端.SendRequest(BaseComplex)调用和WireShark输出之间发生的唯一步骤是.Net框架的Xml序列化。我在谷歌上搜索过这个问题,但没有找到任何正确的方向。
为什么我的客户端无法正确地将请求设置为xml?
注意事项:
- 我已经将提供给我的wsdl拉入SoapUI,当在服务器上运行它时,我们看到了成功的结果。(在运行代码时,我在测试中使用相同的值)
- 我只是这个wsdl的使用者/客户端,不能控制wsdl/服务定义
- 我不知道为什么使用MessageContract而不是ServiceContract
- 该问题最有趣的方面之一是ComplexBase定义了Decimal字段,并且该字段被正确地序列化。也就是说,Request.DecimalProperty序列化,而Request.ComplexA.DecimalProperty
- 其他一些注意事项是,这只是ComplexA类型中Decimal和可为null的Decimal字段的问题ComplexA.DecimalProperty和Complex A.NullableDecimalProperty[/strong>无法序列化
- 该问题最有趣的方面之一是ComplexBase定义了Decimal字段,并且该字段被正确地序列化。也就是说,Request.DecimalProperty序列化,而Request.ComplexA.DecimalProperty
我们非常感谢您的帮助。请请求是否需要一个样本,(我没有在这篇文章中包括,因为出于安全原因,它需要被屏蔽)
所以,我已经解决了这个问题。wsdl定义的对象具有小数和可为null的小数,以及每个定义为DecimalFieldIsSpecified的布尔。出于某些不合理的原因,有必要手动将这些设置为true,以便xmlserializer获取字段。。。。