内置的基于BinaryFormatter的.Net序列化有哪些不足之处?

Sam*_*ron 16 .net serialization

内置的基于BinaryFormatter的.Net序列化有哪些不足之处?(性能,灵活性,限制)

如果可能的话,请附上一些代码.

例:

要序列化的自定义对象必须使用[Serializable]属性进行修饰或实现ISerializable接口.

不太明显的例子:

匿名类型无法序列化.

Mar*_*ell 21

如果你的意思是BinaryFormatter:

  • 基于字段,是非常不容忍的版本; 更改私有实现细节,它会中断(甚至只是将其更改为自动实现的属性)
  • 与其他平台不交叉兼容
  • 对新领域不是很友好
  • 是特定于程序集(元数据被烧毁)
  • 是特定于MS/.NET(可能是特定于.NET版本)
  • 不是混淆安全的
  • 不是特别快,或小输出
  • 不适用于轻型框架(CF?/ Silverlight)
  • 有一种令人沮丧的习惯,就是拉你没想到的东西(通常是通过events)

我花了很多时间在这个领域,包括编写一个(免费)实现Google的"协议缓冲区"序列化API for .NET; protobuf网

这是:

  • 输出更小,速度更快
  • 其他实现交叉兼容
  • 扩展
  • 合同为基础
  • 混淆安全
  • 装配独立
  • 是一个开放的文件标准
  • 适用于所有版本的.NET(警告:未在Micro Framework上测试)
  • 有钩子插入ISerializable(用于远程等)和WCF