将二进制文件反序列化为对象数组

本文关键字:对象 数组 反序列化 二进制文件 | 更新日期: 2024-06-14 08:11:51

我已经序列化了一个对象数组。我想将它们反序列化回一个数组。我发现的例子要么反序列化单个对象,要么使用哈希表并将其转换为字典。其他一些示例使用了对象图,但我应该能够将其投射回源对象中。这是我的密码。。。

        if(File.Exists(binData))
        {
            FileStream fs = new FileStream(binData, FileMode.Open);
            BinaryFormatter formatter = new BinaryFormatter();
            ViewerData vd = new ViewerData();
            try
            {
                vd = (ViewerData)formatter.Deserialize(fs);
            }
            catch
            {
                MessageBox.Show("Something went wrong");
            }
        }

我可以枚举反序列化的数据吗?或者我可以将它反序列化为数组吗?

编辑:

我没有得到任何错误,但该代码没有返回数组。该对象包含4个属性、3个字符串和一个图像。我需要能够对结果进行迭代,这样它才会有用。我正在用以下内容序列化对象。。。

        stream = File.Open(filename, FileMode.Create);
        BinaryFormatter bin = new BinaryFormatter();
        fileInfoArray = fileInfoList.ToArray();
        viewerData = new ViewerData[fileInfoArray.Length];
        for (int i = 0; i < fileInfoArray.Length; i++)
        {
            viewerData[i] = new ViewerData(fileInfoArray[i]);
            bin.Serialize(stream, viewerData[i]);
        }
        stream.Close();

一切都很好。如何将二进制文件反序列化回对象数组,而不是一个ViewerData对象?

将二进制文件反序列化为对象数组

您分别序列化每个对象,但只反序列化一个对象。您可以简单地序列化整个对象数组:

// Serialize
bin.Serialize(stream, viewerData);
// Deserialize
var result = (ViewerData[])bin.Deserialize(fs);

或者序列化项目的数量并在循环中反序列化它们(知道项目的数量):

// Serialize
bin.Serialize(stream, fileInfoArray.Length);
for (int i = 0; i < fileInfoArray.Length; i++)
{
    viewerData[i] = new ViewerData(fileInfoArray[i]);
    bin.Serialize(stream, viewerData[i]);
}
// Deserialize
BinaryFormatter formatter = new BinaryFormatter();
int length = (int)formatter.Deserialize(fs);
for (int i = 0; i < length ; i++)
{
    viewerData[i] = (ViewerData)bin.Deserialize(fs);        
}   
不要序列化数组中的每个对象。序列化整个数组
也可以反序列化为数组。