Dav*_*rey 5 c# serialization file object
我在做它创建于指定位置的文件的错误日志库,然后保存在该文件中的错误信息,然后可以通过,我打算在这个库一起写一个单独的塔斯克程序读取.
我保存它的方式是二进制格式(使用BinaryFormatter()
和FileStream()
),我将一个名为ErrorEntry的类序列化到文件中并将其附加到文件的末尾.这意味着我有一系列的ErrorEntries背靠背.我没有它作为列表,因为似乎不必将所有信息从文件读入列表,添加条目,然后将其保存回文件并转储资源.仅需要执行单个写入命令似乎更有效,并且只将每个命令存储为自己的序列化对象.
我的问题是我可以找到几个关于序列化列表或单个对象的例子,但没有关于多个 - 但是单独 - 对象的内容.虽然我想将它们保存为单个对象,但是当我加载它们时,我想要读取该对象并将该系列作为该对象的列表返回.我想有类似的东西
while(!EOF)
{
//deserialize each object
//add individual object to a list
}
//return the list of objects
Run Code Online (Sandbox Code Playgroud)
我如何从单个文件中反序列化每个对象?它是否有一个内部标记,以上工作,我只需要检测它是否是文件的结尾,还是我需要做其他事情来阅读它们?
有了FileStream fs;
你可以做fs.Position!=fs.Length
检测EOF.
在写入新条目之前附加,使用FileMode.Append
或fs.Seek(0, SeekOrigin.End);
结束时.
完全反序列化:
public static ICollection<T> DeserializeList<T>(FileStream fs)
{
BinaryFormatter bf = new BinaryFormatter();
List<T> list = new List<T>();
while(fs.Position!=fs.Length)
{
//deserialize each object in the file
var deserialized = (T)bf.Deserialize(fs);
//add individual object to a list
list.Add(deserialized);
}
//return the list of objects
return list;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8484 次 |
最近记录: |