繁体   English   中英

将各种类型序列化为一个文件

[英]Serialiazing various types into one file

我正在使用BinaryFormatter序列化我的对象。 我在它们的相关列表中有各种对象类型。 是否有一种“最佳”方式将所有对象序列化为一个文件,但能够在反序列化时将它们分开? 目前,我正在反序列化整个文件,并检查每个对象中的特定字段,以查看反序列化后应将它们重新添加到的列表。 例如,我所有的福特汽车都有“ FORD”字段,丰田有“ TOYOTA”等。反序列化后,我“遍历”对象,检查其“ company”字段,然后将它们分配给List<Company>

我不确定这是否是最有效的处理方式。 有什么建议么? 谢谢您的帮助

这很容易...而不是序列化每个单独的项目。 只需创建一个“父”类,该类对于每种项目类型仅具有一个属性。 然后您可以序列化该对象。 当您在另一端反序列化它时,它将已经为您完全整理。

您可以更有效地执行此操作的唯一方法是将它们序列化为不同的文件(基于对您的域有意义的字段条件)。 因为不能保证它们将按特定顺序序列化到文件中,所以无论如何反序列化都必须将整个文件读入内存,以查找该字段值就是您所要使用的类型的所有实例寻找。

我认为您已经在序列化到文件的限制内尽了最大的努力。 您是否认为SQLite是您的存储机制?

您正在做的事情听起来像字典( Dictionary<string, List<Company>> )。 不过,请提供您问题中的一些源代码。

没有内置的序列化字典的方法,但是您可以创建自己的自定义类。 我会将其留给您作为练习,以便谷歌搜索它:)

如果要继续以相同的方式进行序列化,但要用对象内部的一个已知成员(并且该成员始终相同)分开,则可以使用LINQ查询以短代码提取对象:

IEnumerable<Company> companiesFromFile = GetDeserializedFile();
var dictionaryFromFile = companiesFromFile.ToDictionary(c => c.Name);

然后,如果您必须分开列表,则可以通过以下方法完成:

List<Company> toyotaList = dictionaryFromFile["Toyota"];
// etc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM