将各种类型的序列化成一个文件
-
28-09-2019 - |
题
我正在使用 BinaryFormatter
序列化我的对象。我的相关列表中有各种对象类型。是否有一种“最佳”方法将所有对象序列化为一个文件,但能够在避难所中分开?目前,我必须对整个文件进行审理,并检查每个对象中的特定字段,以查看我应该在避免后应将其重新添加到什么列表中。例如,我所有的福特汽车都有“福特”字段,丰田拥有“ toyota”等。在避免时,我可以通过对象进行检查,检查他们的“公司”字段,然后将它们分配给一个 List<Company>
.
我不确定这是否是最有效的做事方式。有什么建议么?谢谢您的帮助
解决方案
这很容易……而不是序列化每个项目。只需完成一个“父”类,该类简单地拥有每个项目类型的属性即可。然后您可以序列化该对象。当您在另一端进行挑选时,它将已经为您整理好了。
其他提示
您可以更有效地做到这一点的唯一方法是将它们序列化为不同的文件(基于对您的域有意义的字段标准)。因为不能保证您将以特定的顺序序列将它们序列化到文件中,所以当您避免时,您必须将整个文件读取到内存中,以查找所有字段值所在的类型的所有实例寻找。
我认为您已经在尽力而为,以序列化到文件的约束。您是否认为Sqlite是您的存储机构?
你在做什么听起来像词典(Dictionary<string, List<Company>>
)。不过,请在您的问题中提供一些源代码。
没有内置的方式来序列化词典,但是您可以做自己的自定义类。我会把那个作为练习给您的Google :)
如果您想继续以相同的方式序列化,但是由对象内的已知成员分开(成员始终相同),则可以使用LINQ查询来提取用简短代码的对象:
IEnumerable<Company> companiesFromFile = GetDeserializedFile();
var dictionaryFromFile = companiesFromFile.ToDictionary(c => c.Name);
然后,如果您必须将列表分开,则可以通过:
List<Company> toyotaList = dictionaryFromFile["Toyota"];
// etc
不隶属于 StackOverflow