序列化和反序列化多个对象
我正在创建一个错误日志库,它在指定位置创建一个文件,然后将错误信息保存在该文件中,然后可以由我打算与此库一起编写的单独任务程序读取。
我保存它的方式是二进制格式(使用BinaryFormatter()
和FileStream()
),我将一个名为ErrorEntry的类序列化到文件中,并将其附加到文件的末尾。 这意味着我有一系列的ErrorEntries背靠背。 我没有它作为列表,因为似乎不必将所有信息从文件读入列表,添加条目,然后将其保存回文件并转储资源。 仅需要执行单个写入命令似乎更有效,并且只将每个命令存储为自己的序列化对象。
我的问题是我可以找到关于序列化列表或单个对象的几个例子,但是在多个 – 但是单独的 – 对象上没有。 虽然我想将它们保存为单个对象,但是当我加载它们时,我想要读取该对象并将该系列作为该对象的列表返回。 我想有类似的东西
while(!EOF) { //deserialize each object //add individual object to a list } //return the list of objects
我如何从单个文件中反序列化每个对象? 它是否有一个内部标记,以上工作,我只需要检测它是否是文件的结尾,或者我是否需要做其他事情来阅读它们?
使用FileStream fs;
你可以做fs.Position!=fs.Length
来检测EOF。
附加时,使用FileMode.Append
或fs.Seek(0, SeekOrigin.End);
在写入新条目之前结束。
完全反序列化:
上述就是C#学习教程:序列化和反序列化多个对象分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static ICollection DeserializeList (FileStream fs) { BinaryFormatter bf = new BinaryFormatter(); List list = new List (); 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; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/987911.html