C# 序列化对象是否可移植?

C# 序列化对象是否可移植?,c#,serialization,C#,Serialization,在我的C#应用程序中,我通过序列化保存了类对象。现在我的磁盘上有一个二进制文件。如果在其他系统上安装相同的应用程序,该文件是否可以移植?是否有缺点需要考虑? 如果你有完全相同的应用程序版本,那么几乎任何串行化器都会很高兴。当您开始迭代版本时,假设您使用的是BinaryFormatter,您就可以开始遇到版本兼容性问题,特别是当您进行了重构(移动/重命名类型、移动/重命名字段等)时。这就是为什么我强烈建议不要使用BinaryFormatter进行持久化。如果您只想存储数据,那么有很多其他序列化程序

在我的C#应用程序中,我通过序列化保存了类对象。现在我的磁盘上有一个二进制文件。如果在其他系统上安装相同的应用程序,该文件是否可以移植?是否有缺点需要考虑?

如果你有完全相同的应用程序版本,那么几乎任何串行化器都会很高兴。当您开始迭代版本时,假设您使用的是

BinaryFormatter
,您就可以开始遇到版本兼容性问题,特别是当您进行了重构(移动/重命名类型、移动/重命名字段等)时。这就是为什么我强烈建议不要使用
BinaryFormatter
进行持久化。如果您只想存储数据,那么有很多其他序列化程序可以很好地工作
XmlSerializer
、Json.NET、protobuf NET、
DataContractSerializer
等—它们都比
BinaryFormatter
更优雅地处理版本控制。如果出于性能原因(大文件等)特别需要二进制文件,那么protobuf-net可能值得一看(但我有偏见)。否则,您可以很好地使用压缩xml和json压缩


另外,请注意,
BinaryFormatter
在其他平台之间根本不起作用,或者通常甚至在其他.NET框架(包括移动框架等)上也不起作用。

您使用了哪个序列化程序?所有文件都是二进制文件;p@Marc当前位置但有些人比其他人更重要@马克:你说得对:-)对于二进制,我想强调我使用了BinaryFormatter类。@JohnThreepwood“二进制序列化”!=<代码>二进制格式化程序;还有其他序列化程序也可以写入非文本数据。重要的区别,很好-谢谢你的详细回答。我将尝试使用XmlSerializer。它似乎很容易使用,而且我的数据也不太大。