【发布时间】:2012-01-26 10:52:02
【问题描述】:
当我的 asmx Web 服务的 WebMethod 返回我的对象时,我得到 在序列化 T 类型的对象时检测到循环引用错误。
如果我从 T 类中删除 Equals 和 GetHashCode,问题就会消失。 我没有任何循环引用,所以看起来序列化通过比较对象来检测循环引用,如果它们相等,它认为有圆。
当然,我可以像许多人一样定义一个带有 Equals 的类和另一个用于序列化的类,然后将数据从一个类复制到另一个类中,但我希望能够在一个类中这样做以避免parallel class hierarchies作为code smells之一。
我希望能够定义 Equals、GetHashCode 并保留它Serializable。怎么样?
【问题讨论】:
-
OnSerializing 和 OnSerialized 属性有助于在序列化开始/结束时设置标志和禁用/启用方法行为,但它不适用于 WebMethods 结果 SOAP/Xml 序列化程序。
-
你能举一个简单的小例子来说明这个问题吗?请包括导致问题的
Equals和GetHashCode实现。 -
另外,如果您使用的是 ASMX Web 服务,那么
[Serializable]一点也不重要。 -
我正在使用一个类来支持 System.Runtime.Serialization.Json.DataContractJsonSerializer 和 Xml WebMethod 序列化。到目前为止,它一直有效,直到我定义了 Equals 和 GetHashCode 以便能够将它们放入字典并合并 dups。
标签: .net xml web-services serialization xml-serialization