2009-10-25 78 views
2

我有一個自定義列表,我想將其嵌入爲資源,以便可以在每次新安裝時將其複製出來。但是,我的列表被序列化爲一個二進制文件,當我將它添加爲資源時,我不能將它複製出來,因爲C#將它視爲一個字節數組。當我從我的資源中提取文件時,我需要能夠將此字節數組轉換回我的自定義列表。有人能給我一個如何完成這種轉換的想法嗎?C#將字節數組轉換爲通用列表

謝謝!

+0

當您說有「列表」時,具體是什麼意思? – 2009-10-25 19:42:01

回答

6

你用什麼方式將它序列化了?通常情況下,你只會改變這個過程。例如:

BinaryFormatter bf = new BinaryFormatter(); 
using(Stream ms = new MemoryStream(bytes)) { 
    List<Foo> myList = (List<Foo>)bf.Deserialize(ms); 
} 

很明顯,如果您使用了不同的序列化程序,您可能需要調整它!或者,如果您可以將數據作爲Stream(而不是byte[]),那麼您可能會丟失步驟MemoryStream ...

+0

當然,不要忘了處理'MemoryStream'! – Noldorin 2009-10-25 19:47:11

+0

嗯,是的。我通常是一個討厭這個的人,但對於'MemoryStream'來說,它**確實**沒有任何區別。我會編輯,只爲你;-p – 2009-10-25 19:51:26

+0

啊,我明白了。我正在把資源和序列化到一個文件,然後試圖重新序列化回我的列表。這更有意義。 謝謝! – Nathan 2009-10-25 20:08:50

1

列表如何被序列化?您應該有權訪問相應的Deserialize()方法,其結果可以轉換回原始列表類型。

+0

這是我如何序列化資源。 (!FiOhaus.Exists) { DirectoryUtil.DoesDataFileExist(OhausScale); (Stream St = new FileStream(OhausScale,FileMode.OpenOrCreate)) BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(St,Resources.Ohaus_Adventure_Pro); } } – Nathan 2009-10-25 21:23:01

+0

這就是我如何反序列化文件回列表。 使用(流ST =新的FileStream(_directory + MODELNAME + 「.DAT」,FileMode.Open)) { 如果(St.Length> 0){ BinaryFormatter的格式化=新的BinaryFormatter(); 設置=(列表)formatter.Deserialize(St); isLoaded = true; } } – Nathan 2009-10-25 21:25:12

1

您需要將字節數組反序列化回您的列表實例。要做到這一點的方式取決於您對其進行序列化的機制。例如,如果您使用BinaryFormatter對其進行序列化,則使用相同的方法進行反序列化。