【问题标题】:WCF Json serialization with service reference not updated未更新服务引用的 WCF Json 序列化
【发布时间】:2014-04-08 18:16:47
【问题描述】:

我们面临一个严重的问题,但在说这是 .net 中的一个错误之前,我想知道是否有人了解正在发生的事情以及原因。

这是我们的配置: 1 个项目 1个项目代理 许多其他项目也将 DAL 与 WCF 服务一起使用。 它们与 wcf 服务进行通信。

我们在 DAL 的一个对象中添加了一些属性 我们还没有更新代理项目中的服务引用。

(1)在带有断点的代理中,我们可以看到所有内容都被正确检索,当然除了新属性(服务引用未更新 => 没有异常)

代理返回一个带有 WebMessageFormat.JSON 的 JSON(我们使用默认提供的序列化)

代理中调用的方法在DAL中调用(1)的方法的响应为空。

所以这肯定是 JSON 序列化的问题?没有?

最糟糕的是,我们决定从 WebMessageFormat.JSON 更改为 WebMessageFormat.XML 看看是否发生同样的情况,==> 没有

最后,其他未更新的项目没有问题(他们不使用 JSON ser)

有人遇到过同样的问题,或者知道为什么会这样吗?

任何帮助都会非常好:)

提前感谢大家,对不起我的英语。

【问题讨论】:

  • 为了帮助您解决问题,您应该发布一些代码 - 您的服务和 web.config 的相关部分可能很有趣。 “空”是什么意思?空引用?另外,我在理解您对生成的客户端代理所做的事情时遇到了一些麻烦。您是否重新生成了它,或者出于某种原因您不想/不能重新生成它?

标签: c# .net json wcf serialization


【解决方案1】:

(这不是一个确定的答案,而是一个怀疑。但是,这太多了,不能作为评论包含在内。)

注意:我假设您的问题如下(如果错误,请更正/澄清)。

  • 代理项目通过 WCF 调用 DAL,而不是相反。这将解释 (1) 以及未通过每一层更新的属性。
  • 客户端调用代理项目,该项目也通过 WCF 暴露自己(这将解释代理项目返回 WebMessageFormat.JSON 响应)

正如您所说,这里的问题可能与代理响应本身的序列化有关。虽然始终建议您更新项目引用,但在这种情况下,生成的类可能不会完全映射到它们所描述的响应。

到目前为止,我的看法是类中的更改已经改变了内部响应,导致引用无法再正确映射到响应类型,这可能是映射类中的响应类型。 XML 序列化程序可能是序列化程序的单独实现,因此 JSON 序列化程序很可能在这种特定情况下失败。您可以通过检查内部输出中是否有任何first chance exception 或在您自己的代码之外添加调试来检查是否是这种情况。这可能会确认 JSON 序列化正面临问题。

这实际上可能是一个错误,或者是不存在要映射的属性时不受支持的场景。

【讨论】:

  • 在尝试了许多场景之后,我们得出了相同的结论......这是一个不受支持的场景。感谢您的帮助,并试图为此提供答案。在调试模式下,来自 wcf 的响应是好的,并且在返回另一个 wcf 中的 JSON 之前崩溃。绝对是 JSON 序列化的问题。
【解决方案2】:

如果您要使用来自 WCF 的序列化 JSON 数据,我建议您将 DataContractSerializer 与 JSON 一起使用(当然是设置您的数据合同)。我在使用 JSON 序列化程序时遇到了一些问题,并意识到它对 .NET 有点不确定

另一种解决方案是将此 JSON 序列化程序与 .NET 一起使用: http://james.newtonking.com/json

【讨论】:

    【解决方案3】:

    响应数据中是否有日期类型的对象或任何其他非原始数据类型,当我尝试在响应数据中包含日期对象时遇到问题,为了快速解决我更改了 数据类型转换为字符串,它对我有用。

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多