这是我在项目中序列化的结构:
[Serializable]
class A : List<B> //root object being serialized
[Serializable]
class B
+ [A few serializable fields]
+ C customList
[Serializable]
class C : List<D>
[Serializable]
class D
+ [several serializable fields]
|
+ [NonSerialized] nonserializable3rdPartyClass data
+ string xmlOf3rdPartyData
|
+ [OnSerializing]
+ private void OnSerializing(StreamingContext context)
|
+ [OnSerialized]
+ private void OnSerialized(StreamingContext context)
|
+ [OnDeserialized]
+ private void OnDeserialized(StreamingContext context)
nonserializable3rdPartyClass
虽然没有标记为,但[Serializable]
提供了我在我的和.ToXml
方法中使用的方法 ,分别用于在 中存储和检索 XML 字符串。.FromXml
.OnSerializing
.OnDeserialized
xmlof3rdPartyData
我最近遇到了一个问题,在某些未知情况下(到目前为止,我只能使用来自客户的序列化数据文件重现该问题,该客户首先报告了该问题),我的.OnSerializing
和.OnSerialized
方法仅被称为 57 /160 次(其中 160 是结构中对象的总数D
),当使用 aBinaryFormatter
序列化到文件时,留下 103 个设置为 的D
对象。使用此处描述的方法克隆结构时(这与我用来序列化到文件的方法基本相同),我看到/的结果相同,但我的方法被调用了 160 次。xmlOf3rdPartyData
null
.OnSerializing
.OnSerialized
.OnDeserialized
这段代码已经使用了几个月没有问题(至少据我所知),我仍在试图确定为什么现在而不是更早发生这种情况。在调试时我没有看到任何第一次机会异常,而且我在方法开始时的断点根本没有被击中超过 57 次。关于为什么会发生这种情况/如何解决它的任何想法?