【发布时间】:2009-11-13 20:06:01
【问题描述】:
我有一个相当复杂的对象模型,我正在尝试使用 WCF 对其进行序列化。我遇到了一个问题,我可以在服务器上创建一个新实例并将其返回给客户端,然后尝试将相同的对象传回,甚至使用 DataContractSerializer 对其进行序列化会引发异常。
测试方法 Server.Service.Test.SerializationTest.TestFilingSerialization 抛出异常:System.Runtime.Serialization.SerializationException:反序列化 MyNameSpace.MyObject 类型的对象时出错。 ''类型中的属性''没有设置方法
它没有给我任何关于我应该丢失的 setter 的信息,即使我已经尝试通过继承层次结构查找丢失的 setter,我似乎无法通过这个。 MyObject 是我要序列化的对象的一种属性,这是有趣的部分。在该属性的设置器中,我的代码如下所示:
set
{
_backingField = value;
_backingField.IsDirtyManager.SetIsDirty();
NotifyPropertyChanged("MyProperty");
if (!ContainsType(_backingField.GetType()))
{
Aggregates.Add(_backingField);
}
}
如果我将 Aggregates.Add 注释掉,它会进入下一个属性并在那里抛出相同的异常,更重要的是,它会通过具有相同代码的其他属性,在它遇到这个并死掉之前,所以我不会不知道是什么问题。
任何人都知道真正的错误在哪里,因为属性名称和类型没有在异常中填写,所以看起来错误必须是别的东西。如果我只是在客户端上创建一个新实例,我可以反序列化和序列化没有问题,所以这里肯定有一些我遗漏的东西。关于寻找什么的任何想法?
编辑
我实际上只是这样做:
- 创建实例
- 序列化
- 反序列化
- 重新序列化
- 死在这里
【问题讨论】:
-
所以这在序列化期间在客户端爆炸了?
-
是的,完全跳过 WCF,就是这样,这是一个序列化问题。
标签: wcf serialization datacontractserializer