如何在C#中使用BinaryFormatter更改反序列化的顺序?

Tho*_*enz 5 .net c# serialization binaryformatter

假设我有classA,其中包含classB,两者都是[Serializable].

我假设,在反序列化中,classB将首先被反序列化.

但事实并非如此,因为我可以通过记录每个[OnDeserialized]方法被击中来确认.

现在我有以下问题:

在classA的反序列化完成后,它应该使用classB中的值进行自我设置.不幸的是,此时尚未对classB进行反序列化,因此classA设置错误.

我的问题将得到解决,如果我可以强制BinaryFormatter在classA之前反序列化classB,或者将对象图从底部到顶部而不是从上到下解析.

另一个明显的解决方案是让classB在反序列化时激活一个事件然后让classA自行设置,但我想远离这个非优雅的解决方法.

如果有人知道更好的解决方案,我将不胜感激.

Pau*_*ner 3

如果您必须明确控制对象序列化和反序列化的顺序,我建议您实现ISerializableA 的接口:

public class ClassA : ISerializable
{
    private ClassB _dependency;

    public ClassA(SerializationInfo information, StreamingContext context)
    {
        _dependency 
            = (ClassB)information.GetValue("_dependency", typeof(ClassB));

        // TODO: Get other values from the serialization info.
        // TODO: Set up stuff from dependent object.
    }

    public SerializationInfo GetObjectData()
    {
        information.AddValue("_dependency", _dependency, typeof(ClassB));

        // TODO: Add other fields to the serialization info.
    }
}
Run Code Online (Sandbox Code Playgroud)