将二进制文件反序列化为集合?

时间:2014-08-22 08:26:36

标签: c# wpf binary persistence deserialization

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

以下代码是我的" Open"按钮点击:

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

1 个答案:

答案 0 :(得分:0)

必须要说的是,回答有关您没有想要向我们描述的错误的问题有点棘手,但是之前已经有过序列化和反序列化数据的经验,我知道它是什么可能。首先,我说我的代码没有明显的问题。

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

测试是否存在此问题的一种方法是序列化相同类型的另一个数据对象,然后尝试立即对其进行反序列化。如果它反序列化,那么你的代码没有问题,问题很可能是你的类定义被更改,因为你的对象被序列化了。如果您无法对其进行反序列化,那么您的代码就会出现问题。