是否有一种技术可以检测出被认为是非序列化的成员,这些成员实际上是序列化的?

时间:2011-11-06 19:09:41

标签: .net serialization event-handling

我有下一个问题:我有一个大对象图是二进制序列化的,其中许多字段和事件标记为[NonSerializable]或[field:NonSerializable]。

问题在于,我仍然不知道从哪里或为什么(复杂的调用树),一些Action或Func(标记为[NonSerializable]并且已分配lambdas的字段)被序列化,如您所见创建的二进制文件。

那么,我可以使用什么技术来检测“序列化泄漏”:我的代码成员将这些事件挂钩?

1 个答案:

答案 0 :(得分:2)

我会在这里使用反射,将每个属性/字段用于相关类型(考虑列表和其他泛型),尝试在模型中构建我们期望的完整类型列表。从那里,获取EventHandlerList或Delegate类型的所有字段(考虑基类和可能的子类)。现在检查是否有任何字段未标记为NonSerializedAttribute以忽略序列化。

或者更容易:使用不 EVER 编写代理的序列化程序;任何XmlSerializer,JavascriptSerializer,DataContractSerializer,或者如果你想要直接二进制protobuf-net。或者几乎任何不是BinaryFormatter或NetDataContractSerializer的东西。