c# - 为什么二进制序列化需要将对象标记为可序列化?

标签 c# .net serialization

我使用的是 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/

相关文章:

c# - 在 GUI 上打印到屏幕

c# - 向 EditorFor 添加一个类 - razor c#

c# - 在 Azure 上使用 Excel

python - Flask jsonify 对象列表

c# - C# 中空文字的类型

c# - .net 核心项目中的 Lambda 运算符

c# - 使用非字符串作为字符串时如何显示错误(而不是自动使用 ToString)?

c# - 在 Win 窗体应用程序中禁用右键单击

java - 在操作调用中生成 Struts 2 JSON 输出

symfony - JMS 序列化程序 : Serialize custom properties of entities