我使用的是 xml 序列化器,但是当我切换到二进制序列化时,它抛出了一个异常:
Runtime error: dotNet runtime exception: Type 'MyTypes.MyObject' in Assembly 'MyTypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
为什么它的询问方式与 xml 序列化程序不同?
仅仅将对象标记为可序列化就足以解决这个问题了吗?我不想指定序列化应该如何发生。
最佳答案
XmlSerializer
在所有情况下都可以安全使用,因为它只序列化可公开访问的数据,类的用户无论如何都可以访问。
任何运行时格式化程序(包括 BinaryFormatter
)都会序列化公开和私有(private)可访问的信息,因此可以让调用者访问他们不应该拥有的信息。通过将您的类型标记为 [Serializable]
,您实际上是在说您已经考虑过这一点,并且允许任何人查看有关您的类型的序列化信息。
这是一个“默认安全”的选择,这样您就不会不小心将敏感数据(如信用卡详细信息或其他任何内容)序列化到不应放置的位置,例如日志或数据库。
关于c# - 为什么二进制序列化需要将对象标记为可序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596317/