gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:19:25 24 4
gpt4 key购买 nike

假设我有一个包含 classB 的 classA,并且两者都是 [Serializable]。

我假设,在反序列化时,类 B 将首先被反序列化。

然而,情况并非如此,因为我可以通过在每个 [OnDeserialized] 方法被命中时记录日志来确认。

现在我有以下问题:

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

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

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

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

最佳答案

如果您必须明确控制对象序列化和反序列化的顺序,我建议您为 A 实现 ISerializable 接口(interface):

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.
}
}

关于c# - 如何在 C# 中使用 BinaryFormatter 更改反序列化的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1637069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com