[英]Deserialize binary file to array of objects
我已經序列化了一個對象數組。 我想將它們反序列化為數組。 我發現的示例要么反序列化單個對象,要么使用哈希表並將其轉換為字典。 其他一些示例使用了對象圖,但是我應該能夠將其強制轉換回源對象。 這是我的代碼...
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);
}
不要序列化數組中的每個對象。 序列化整個數組。
還反序列化為數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.