我已经序列化了一个对象数组。我想将它们反序列化为一个数组。我发现的示例要么反序列化单个对象,要么使用哈希表并将其转换为字典。其他一些例子使用了一个对象图,但是我应该能够把它重新放回到源对象中。这是我的代码......
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对象?
答案 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)
不要序列化数组中的每个对象。序列化整个阵列 也将反序列化为数组。