1

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

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

4

3 回答 3

3

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

于 2010-08-15T01:37:43.587 回答
0

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

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

于 2010-08-15T01:38:50.900 回答
0

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

没有内置的方法可以序列化字典,但您可以制作自己的自定义类。我会把它作为练习留给你去谷歌搜索:)

如果您想继续以相同的方式序列化,但由对象内部的已知成员分隔(并且该成员始终相同),您可以使用 LINQ 查询来提取具有短代码的对象:

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

然后,如果您必须分开列表,您可以通过以下方式进行:

List<Company> toyotaList = dictionaryFromFile["Toyota"];
// etc
于 2010-08-15T01:56:34.643 回答