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

时间:2013-11-30 20:20:57

标签: c# arrays serialization

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

        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对象?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

不要序列化数组中的每个对象。序列化整个阵列 也将反序列化为数组。