gpt4 book ai didi

c# - 序列化和反序列化多个对象

转载 作者:太空狗 更新时间:2023-10-29 23:08:40 24 4
gpt4 key购买 nike

我正在制作一个错误记录库,它在指定位置创建一个文件,然后将错误信息保存在该文件中,然后我打算与该库一起编写的单独的任务程序可以读取该文件。

我保存它的方式是二进制格式(使用 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.Appendfs.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;
}

关于c# - 序列化和反序列化多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com