【问题标题】:Deserializing a Binary File to Collection?将二进制文件反序列化为集合?
【发布时间】:2014-10-16 01:13:24
【问题描述】:

我正在尝试反序列化文件并在我的程序中打开它。在这个特定的程序中,我可以将我的客户对象集合保存/序列化到文件中,但是当我尝试在程序中反序列化并重新打开文件时,它会失败。知道为什么会失败吗?

以下代码是我的“打开”按钮点击:

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog sfd = new OpenFileDialog();
    Nullable<bool> result = sfd.ShowDialog();
    try
    {
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        using (Stream fs = new StreamReader("data_to_write.xml"))
        {
            NewAccountList = bf.Deserialize(fs) as ObservableCollection<Contact>;
        }
    }
}

【问题讨论】:

  • 请添加Contact类的代码,这样可以更深入地了解问题
  • 那么分享错误详情呢?

标签: c# wpf binary persistence deserialization


【解决方案1】:

不得不说,回答一个你懒得向我们描述的关于错误的问题有点棘手,但是之前有一些序列化和反序列化数据的经验,我知道它是什么可能。首先,我认为您的代码没有明显问题。

当你序列化一个数据对象时,它是那个类那个时候的反射。如果您将数据对象序列化为文件,然后对该类进行更改,则序列化文件将不再代表该类......它将代表更改之前的类,但不是它的当前版本。除非所有更改都被撤消,否则无法使用该编辑的类反序列化该文件。

测试您是否遇到此问题的一种方法是序列化另一个相同类型的数据对象,然后尝试立即对其进行反序列化。如果它可以反序列化,那么你的代码没有问题,问题很可能是你的类定义在你的对象被序列化后发生了变化。如果你不能反序列化它,那么你的代码有问题。

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 2014-01-04
    • 2023-03-30
    • 1970-01-01
    • 2014-11-28
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多