簡體   English   中英

將二進制文件反序列化為對象數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM