簡體   English   中英

我有一個單一文件,需要隨機序列化多個對象。我怎么能在c#中?

[英]I have a Single File And need to serialize multiple objects randomly. How can I in c#?

我有一個文件,需要在創建新對象時序列化同一個類的多個對象。 我無法將它們存儲在數組中,因為我需要將對象創建的實例序列化它們。 請幫我。

你使用什么序列化機制? XmlSerializer可能是一個問題,因為根節點和名稱空間聲明之類的東西,有點難以獲得 - 加上它在部分反序列化方面不是很好。 BinaryFormatter開始時非常脆弱 - 我在大多數情況下不推薦它。

一種選擇可能是protobuf-net ; 這是一個二進制序列化器(使用谷歌的“協議緩沖”格式 - 高效,可移植和版本容忍)。 您可以使用Serializer.SerializeWithLengthPrefix將多個對象序列化為流。 要反Serializer.DeserializeItems相同的項, Serializer.DeserializeItems返回反Serializer.DeserializeItems項的IEnumerable<T> - 或者您可以輕松地將TryDeserializeWithLengthPrefix公開(它當前是私有的,但源是可用的)。

只需在創建文件后將每個對象寫入文件即可 - 完成工作。

如果你想要一個例子,請說 - 盡管這里的單元測試給出了概述。

它基本上就像(未經測試):

using(Stream s = File.Create(path))
{
    Serializer.SerializeWithLengthPrefix(s, command1, PrefixStyle.Base128, 0);
    ... your code etc
    Serializer.SerializeWithLengthPrefix(s, commandN, PrefixStyle.Base128, 0);
}
...
using(Stream s = File.OpenRead(path)) {
    foreach(Command command in
           Serializer.DeserializeItems<Command>(s, PrefixStyle.Base128, 0))
    {
       ... do something with command
    }
}

這里的答案。

簡而言之,只需將所有內容序列化到同一個文件流,然后反序列化即可。 dotNet會知道每個對象的大小

對於到達的每個對象,我們將其轉換為Base64Encoded字符串並將其作為一行存儲在文本文件中。 因此,在此文件中,每行每行都有一個序列化對象。 在讀取時,我們將一次讀取一行文件,並將此Base64編碼的字符串反序列化為Object。 容易..所以讓我們試試代碼。

http://www.codeproject.com/KB/cs/serializedeserialize.aspx?display=Print

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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