gpt4 book ai didi

c# - xml序列化导致字段缺失

转载 作者:行者123 更新时间:2023-12-03 09:19:43 26 4
gpt4 key购买 nike

第三方给了我一个 wsdl。这个 wsdl 是使用 MessageContract 定义的(我很遗憾地说,经过多次谷歌搜索后,我仍然不明白从客户端使用 MessageContractServiceContract 时有什么区别透视)

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

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

我能想到的唯一发生在 client.SendRequest(BaseComplex) 调用和 WireShark 输出显示之间的步骤是 .Net 框架的 Xml 序列化。我已经用谷歌搜索了这个问题,但没有找到任何可以给我指明正确方向的东西。

为什么我的客户端无法正确发出请求 xml?

一些注意事项:

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

非常感谢任何和所有的帮助。如果需要 sample ,请索取(我没有在这篇文章中包含 sample ,因为出于安全原因需要对其进行屏蔽)

最佳答案

所以,我已经弄清楚了。wsdl 定义的对象具有小数和可为空的小数以及每个定义为 DecimalFieldIsSpecified 的 bool 值。由于某些不正当的原因,有必要手动将这些设置为 true 以便 xmlserializer 拾取字段......

关于c# - xml序列化导致字段缺失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com