2009-10-20 37 views
2

我用的是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序列化有什么不同?

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

回答

9

XmlSerializer是安全的在所有情况下使用,因为它只序列公开访问的数据,表明该类的用户可以访问反正。

任何运行时格式化程序(包括BinaryFormatter)都会序列化公开和私下可访问的信息,因此可能会使调用者访问他们不应该拥有的信息。标记您的类型为[Serializable]你实际上是说,你已经想到这一点,并授予权限给任何人看你的类型的序列化信息。

这是一个“安全默认”的选择,这样你就不会意外地结束了序列化,如信用卡的详细信息或任何地方进入他们不应该是这样的,记录或数据库中的敏感数据。

2

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

相关问题