我有一个相当复杂的对象模型,我正在尝试使用WCF进行序列化。我遇到了一个问题,我可以在服务器上创建一个新实例并将其返回给客户端,然后尝试将同一个对象传回,甚至使用DataContractSerializer序列化它会引发异常。
测试方法Server.Service.Test.SerializationTest.TestFilingSerialization引发异常:System.Runtime.Serialization.SerializationException:反序列化MyNameSpace.MyObject类型的对象时出错。没有设置属性''in type''
的方法虽然我已经尝试通过继承层次结构来查找缺少的setter,但它并没有给我任何关于我认为缺少的setter的信息,我似乎无法通过它。 MyObject 是我正在尝试序列化的对象上的一种属性,这是有趣的部分。在该属性的setter中,我的代码如下所示:
set
{
_backingField = value;
_backingField.IsDirtyManager.SetIsDirty();
NotifyPropertyChanged("MyProperty");
if (!ContainsType(_backingField.GetType()))
{
Aggregates.Add(_backingField);
}
}
如果我注释掉Aggregates.Add它进入下一个属性并在那里抛出相同的异常,踢球者是,它通过其他属性使用相同的代码,然后它击中这个并且死亡,所以我不知道问题可能是什么。
任何人都有真正错误的经验,因为异常中没有填写属性名称和类型,所以看起来错误必须是其他错误。如果我只是在客户端上创建一个新实例,我可以反序列化并序列化没有问题,所以我必须在这里找到一些东西。关于要寻找什么的任何想法?
修改
我实际上只是这样做:
答案 0 :(得分:1)
我假设“聚合”是你班上的一个列表。
如果您的类构造函数没有创建聚合列表,那么当您尝试向其添加项时它为null。
这与您获得的错误不符,但值得检查。
修改强>
在Visual Studio中进入“工具” - > “选项” - > “调试” - > “常规”取消选中“启用我的代码”选项。然后再次运行它,您可能会收到更好的错误消息。
答案 1 :(得分:1)
好的,想通了。最后一个开发人员在DataMember属性上设置了Order属性。在错误消息中属性前面的属性是导致问题的属性。我在课堂上错过了一些只读属性。
答案 2 :(得分:0)
如果您的setter受到保护或私有,您可能会看到此消息。如果未标记为公共,序列化程序将无法设置它。你如何公开你的聚合物集合?