2014-05-22 15 views
1

因爲我可以直接訪問序列化通用列表中的特定對象,所以我需要從反序列化的流中知道它的位置。如何查找序列化通用列表中的對象位置

private static void Serialze(object obj, FileStream Stream) 
    { 
     BinaryFormatter bin = new BinaryFormatter(); 
     bin.FilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Low; 
     bin.Serialize(Stream, obj); 
    } 
private static object DeSerialize(FileStream Stream) 
    { 
     if (Stream.Position >= Stream.Length) return null; 
     BinaryFormatter bin = new BinaryFormatter(); 
     bin.FilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Low; 
     object x = bin.Deserialize(Stream); 
     return x; 
    } 

假設我有一個通用的清單如下:

List<MyClass> L1=new List<MyClass>(); 

我怎樣才能找到L1 [10]的位置在我FileStreem,使用它,在反序列化的方法?

+0

這根本不是'BinaryFormatter'支持的功能。當然,即使是這樣,我仍然**強烈**建議不要使用'BinaryFormatter' –

+0

@MarcGravell謝謝你,Marc給你建議。我會研究這個。 –

回答

2

BinaryFormatter使用的格式不可搜索。你不能提取子對象。

這個問題可能是XY-Problem的一個實例。告訴我們你想達到什麼,爲什麼你需要這個。如問,沒有答案。

也許你可以使用數據庫來代替。或者,使用更靈活的Protocol Buffers。

+0

我需要這個,因爲我需要保存一個對象列表,我認爲,反序列化整個列表,每次我尋找它的一個對象,是沉重的。除了將每個對象分別保存在一個文件中之外,還有其他方法嗎? –

+0

許多策略。您可以使用對象所在文件中所有偏移的「數組」來啓動文件。或者,您可以爲每個對象使用一個文件。或者,你會發現性能差異是否重要。也許,你可以反序列化整個文件。 – usr

+1

謝謝,usr。 –