替换BinarySerializer的XmlSerializer。我应该知道什么?

时间:2011-05-12 06:25:21

标签: c# .net serialization

我一直在使用XmlSerializerProject类序列化为文件。它包含各种信息。大多数内容由XmlSerializer自动完成,但实现IXmlSerializable的一个或两个类除外。现在我想切换到二进制序列化器 来缩小文件。我仍然不想序列化私有字段或类似的东西。我只是希望它的行为与XmlSerializer完全相同,但生成较小的文件。

有没有简单的方法可以做到这一点,还是我必须对我的应用程序进行大量更改?或者,我应该使用其他类型的序列化器吗?

3 个答案:

答案 0 :(得分:1)

恕我直言,让你的文件更小的最简单的解决方案是采用当前Office XML格式(ODF和MS中的格式)的方式:Zip it。这样,您就不必更改类中的任何内容。

答案 1 :(得分:1)

切换到BinaryFormatter这是一个坏主意,IMO - 它从根本上改变了行为, 特别是 你能够信任版本之间和之间的文件平台。这也意味着您现在正在序列化 您的字段 ,这可能不是您想要序列化的数据的1:1地图(公众)成员,默认情况下)。

如果您想要较小,可以直接通过DeflateStreamGZipStream运行。如果这还不够,我的下一步行动就是切换到像protobuf-net这样的东西,因为它与XmlSerializer的行为非常相似(不完全相同),但是作为二进制序列化器(不是字段序列化器)。但是,尊重IXmlSerializable - 取决于复杂性,这可能很容易侧重。

答案 2 :(得分:0)

如果只针对空间进行,可能会在序列化后压缩XML文件吗?通过这种方式,您可以保持可读性,并且可以将文件命名为project.xml.zip