【问题标题】:xml serialization causes missing fieldsxml序列化导致缺少字段
【发布时间】:2015-11-19 20:31:57
【问题描述】:

第三方给了我一个 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 和可为空的 Decimal 字段的问题。 ComplexA.DecimalPropertyComplexA.NullableDecimalProperty 无法序列化。

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

【问题讨论】:

    标签: c# xml web-services wcf wsdl


    【解决方案1】:

    所以,我想通了。 wsdl 定义的对象具有十进制和可为空的小数以及每个定义为 DecimalFieldIsSpecified 的布尔值。出于某些邪恶的原因,有必要手动将这些设置为 true,以便 xmlserializer 获取字段....

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 2021-11-21
      • 1970-01-01
      • 2017-05-19
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2011-03-25
      相关资源
      最近更新 更多