【问题标题】:Why does Binary Serialization require the object to be marked as serializable?为什么二进制序列化需要将对象标记为可序列化?
【发布时间】:2010-12-08 10:53:45
【问题描述】:
我使用的是 xml 序列化程序,但是当我切换到二进制序列化时,它会引发异常:
运行时错误:dotNet 运行时异常:程序集“MyTypes,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”中的类型“MyTypes.MyObject”未标记为可序列化。
为什么它的询问方式与 xml 序列化程序不同?
仅仅将对象标记为可序列化就足以解决这个问题?我不想指定序列化应该如何发生。
【问题讨论】:
标签:
c#
.net
serialization
【解决方案1】:
XmlSerializer 在所有情况下都可以安全使用,因为它只序列化可公开访问的数据,该类的用户无论如何都可以访问。
任何运行时格式化程序(包括BinaryFormatter)都会序列化公共和私人可访问的信息,因此可能会让调用者访问他们原本不应该拥有的信息。通过将您的类型标记为[Serializable],您实际上是在说您已经考虑过这一点,并且允许任何人查看有关您的类型的序列化信息。
这是一个“默认安全”的选择,这样您就不会意外地将敏感数据(如信用卡详细信息或其他任何内容)序列化到不应出现的位置,例如日志或数据库。