CSh*_*per 4 c# serialization binary-serialization
众所周知,在MSDN网站上提到:
.NET Framework提供的序列化体系结构可以自动正确处理对象图和循环引用.对象图的唯一要求是被序列化的对象引用的所有对象也必须标记为Serializable.如果不这样做,当序列化程序尝试序列化未标记的对象时,将抛出异常.
我的问题是为什么要应用这种约束?(如果这是一个约束!;-))
BinaryFormatter具有非常不寻常的能力,没有其他类似的功能.它可以在不运行构造函数的情况下创建类的对象.它可以为您的属性赋值,而无需运行属性setter访问器方法.
否则没有什么特别神奇的,它只是坚持你的类对象的字段的值.并在对象反序列化时恢复它们.
并非每个类都适合这样处理,因为安全性问题或因为字段值过于依赖于运行时状态.请注意安全性是一个问题,因为攻击者可以操纵序列化数据并使您的对象进入不一致状态,这是可利用的状态.说一个IsAdministrator属性.关键运行时状态的一个很好的例子是Control.Handle属性,它在反序列化时永远不会具有相同的值.
这些是BinaryFormatter类本身无法弄清楚的实际约束.它需要帮助,明确表示这样做是安全的.当你编写de/serialize对象的代码时,这可能不是正式的,这很容易,但实际上你不了解该类,因为你没有写它.类作者需要这样做,他通过给它[Serializable]属性来做到这一点.
归档时间: |
|
查看次数: |
1156 次 |
最近记录: |