将各种类型串行化为一个文件

时间:2010-08-15 01:32:52

标签: c# serialization binaryformatter

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

我认为你已经在序列化到文件的限制范围内做了最好的事情。您是否认为SQLite是您的存储机制?

答案 2 :(得分:0)

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

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

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

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

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

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