You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BinaryFormatter反序列化.dat文件列表至文本框遇循环终止问题求助

解决BinaryFormatter反序列化多个列表仅读取第一个的问题

问题核心是:你用BinaryFormatter多次序列化列表对象到同一个文件,但反序列化时只调用了一次反序列化方法,所以只能拿到第一个列表。要读取所有列表,需要循环读取直到文件流到达末尾。

正确的反序列化代码示例

假设你的列表类型是List<YourDataType>,文本框是txtDisplay,可以这样写:

using (var fs = new FileStream("yourfile.dat", FileMode.Open))
{
    var formatter = new BinaryFormatter();
    txtDisplay.Clear();
    // 循环读取直到文件流结束
    while (fs.Position < fs.Length)
    {
        var list = (List<YourDataType>)formatter.Deserialize(fs);
        // 遍历当前列表并写入文本框
        foreach (var item in list)
        {
            txtDisplay.AppendText(item.ToString() + Environment.NewLine);
        }
        txtDisplay.AppendText("--- 分割线(下一个列表)---" + Environment.NewLine);
    }
}

关键注意点

  • 序列化时要确保是依次将每个列表单独序列化到同一个文件,而不是把多个列表放到一个大列表里再序列化(如果是后者,反序列化一次就能拿到所有数据)。
  • 反序列化时必须检查文件流的Position是否小于Length,因为每次Deserialize会自动移动流的位置,直到流末尾就停止循环。
  • 注意BinaryFormatter的安全性问题,虽然你被要求使用,但如果文件来源不可信,会有风险。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:55:31