繁体   English   中英

为什么二进制序列化要求将对象标记为可序列化?

[英]Why does Binary Serialization require the object to be marked as serializable?

我使用的是xml序列化程序,但是当我切换到二进制序列化时,它会引发异常:

运行时错误:dotNet运行时异常:在程序集'MyTypes中键入'MyTypes.MyObject',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化。

为什么它与xml序列化器的不同之处呢?

只是将对象标记为可序列化就足以解决这个问题了吗? 我不想指定序列化应该如何发生。

XmlSerializer在所有情况下都可以安全使用,因为它只序列化可公开访问的数据,无论如何该类用户都可以访问。

任何运行时格式化程序(包括BinaryFormatter )都会序列化公共和私人可访问的信息,因此可以让调用者访问他们原本不应该拥有的信息。 通过将您的类型标记为[Serializable]您实际上已经考虑到了这一点,并且正在授权任何人查看有关您的类型的序列化信息。

这是一个“默认安全”的选择,这样您就不会意外地将敏感数据(如信用卡详细信息或其他任何内容)序列化到不应该存在的位置(如日志或数据库)。

BinaryFormatter和xml序列化器之间的根本区别(除了明显的输出格式)是二进制序列化保留类型信息(私有/公共属性,方法,事件等)。 这是此类序列化与远程处理一起使用的原因之一。 唯一的要求是使用SerializableAttribute修饰类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM