WCF Json序列化与服务引用未更新

时间:2014-03-06 08:27:50

标签: c# .net json wcf serialization

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

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

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

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

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

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

所以这肯定是JSON序列化中的一个问题?不是吗?

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

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

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

任何帮助都会非常好:)

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

3 个答案:

答案 0 :(得分:1)

(这不是一个明确的答案,而是一种怀疑。然而,这太多了,无法作为评论。)

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

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

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

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

当映射的属性不存在时,它可能实际上是一个错误或不受支持的情况。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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