使用WCF和DataContractSerializer时出错
我有一个相当复杂的对象模型,我正试图使用WCF序列化它。我遇到了一个问题,我可以在服务器上创建一个新实例并将其返回给客户机,然后尝试传回相同的对象,甚至使用DataContractSerializer对其进行序列化会引发异常 测试方法Server.Service.Test.SerializationTest.TestFilingSerialization引发异常:System.Runtime.Serialization.SerializationException:反序列化MyNameSpace.MyObject类型的对象时出错。没有为类型“”中的属性“”设置方法。 它并没有给我任何关于我应该缺少的setter的信息,即使我尝试过在继承层次结构中查找缺少的setter,我似乎还是无法通过这个MyObject是我试图序列化的对象上的一种属性,有趣的是。在该属性的setter中,我有如下代码:使用WCF和DataContractSerializer时出错,wcf,serialization,datacontractserializer,Wcf,Serialization,Datacontractserializer,我有一个相当复杂的对象模型,我正试图使用WCF序列化它。我遇到了一个问题,我可以在服务器上创建一个新实例并将其返回给客户机,然后尝试传回相同的对象,甚至使用DataContractSerializer对其进行序列化会引发异常 测试方法Server.Service.Test.SerializationTest.TestFilingSerialization引发异常:System.Runtime.Serialization.SerializationException:反序列化MyNameSpace
set
{
_backingField = value;
_backingField.IsDirtyManager.SetIsDirty();
NotifyPropertyChanged("MyProperty");
if (!ContainsType(_backingField.GetType()))
{
Aggregates.Add(_backingField);
}
}
如果我注释掉聚合。Add,它会进入下一个属性,并在那里抛出相同的异常,最关键的是,它会用相同的代码通过其他属性,在它命中这个属性并消失之前,所以我不知道问题可能是什么
任何人都有实际错误发生的经验,因为属性名称和类型没有填写在异常中,所以错误似乎是其他错误。如果我只是在客户机上创建一个新实例,我就可以反序列化和序列化,没有问题,所以这里肯定缺少一些东西。关于找什么有什么想法吗
编辑
我实际上只是这样做:
在Visual Studio中,进入“工具”->“选项”->“调试”->“常规”取消选中“仅启用我的代码”选项。然后再次运行它,您可能会得到更好的错误消息。如果您的setter是受保护的或私有的,您可能会看到此错误消息。如果未标记为public,序列化程序将无法对其进行设置。你如何公开你的聚合集合?好的,找到答案。上一个开发人员已在DataMember属性上设置了Order属性。导致问题的是错误消息中顺序在属性之前的属性。在那个类中,我遗漏了几个只读属性。它不是空的,我甚至尝试添加一个OnDeserialized方法,该方法会被调用来检查这些内容以删除任何额外的变量。我有一个单元测试,创建一个新实例,并直接使用DataContractSerializer进行序列化,反序列化和重新序列化。第三步是它死亡的地方。我敢肯定这个物体里发生了什么事,或者一个设定器把它搞乱了。但是我需要找出在哪里。假警报,看起来我只是在对文件重新序列化两次时犯了一个错误,所以它附加了…仍然是原始错误,所以在序列化过程中客户端发生了爆炸?是的,跳过WCF,完全是这样,这是一个序列化问题。聚合是一个公共列表。这发生在序列化上,我跟踪到它从属性返回对象的点,然后它呕吐。如果我尝试序列化该属性,它可以正常工作。您可以将其添加到描述中,并指示它已被解析吗?这对像我这样来这篇文章寻找答案的人来说是很有帮助的。另外,我在这里()发布了关于相同问题的文章,并描述了一个稍微不同的场景。