C# 列表的部分反序列化

C# 列表的部分反序列化,c#,deserialization,binaryformatter,C#,Deserialization,Binaryformatter,在我的程序中,我将列表序列化为文件。这个文件被损坏了。 当我试图将这个文件反序列化到列表中时,我得到一个异常,告诉我流并没有完成 问题: 我可以反序列化列表的一部分吗?例如,只是为了恢复一些数据。 我使用BinaryFormatter进行序列化。您可能需要对文件进行monkeypatch,使其处于二进制序列化程序接受它的状态。如果序列化另一个文件,找出原始文件的断开位置,并将好文件的结尾固定到坏文件上,会怎么样?那行吗?我敢肯定,要让文件进入一个可操作的状态需要做一点工作。在一切都完美工作之前。

在我的程序中,我将列表序列化为文件。这个文件被损坏了。 当我试图将这个文件反序列化到列表中时,我得到一个异常,告诉我流并没有完成

问题:

我可以反序列化列表的一部分吗?例如,只是为了恢复一些数据。
我使用BinaryFormatter进行序列化。

您可能需要对文件进行monkeypatch,使其处于二进制序列化程序接受它的状态。如果序列化另一个文件,找出原始文件的断开位置,并将好文件的结尾固定到坏文件上,会怎么样?那行吗?我敢肯定,要让文件进入一个可操作的状态需要做一点工作。在一切都完美工作之前。只是程序中发生了一些错误,我认为serelization被中止了。现在一切正常,但数据丢失了。我有一些旧的损坏的文件,我问我是否可以用二进制序列化从它中提取一些数据,不,很遗憾,你不能。您必须处理该文件,尝试修复它,方法是对其进行足够的修改,使程序能够接受它。这可能是不可能的,而且可能会涉及大量的工作。即使无法修复文件,您也应该从中吸取一点,那就是更改序列化代码。例如,您可能希望执行以下操作:1。序列化为同一目录中新的临时文件名下的新文件。2.将旧文件重命名为临时备份文件名3。将新文件重命名为正确的文件名4。删除临时文件名下的原始文件。这样,如果某个文件崩溃,您应该仍然保持原始文件的完整性。您需要分析文件的结尾,将一些数据序列化为一个好的文件,并查看是否可以找出缺少的内容。不幸的是,没有自动修复功能或软件,所以这将是一项艰巨的工作。