1

我知道当你用它注释一个类型时,[serializable]它会告诉 CLR 这个类型可以被序列化。

我不喜欢这对我来说似乎是“黑匣子”魔法。我想知道当我用这个属性标记它时它会做什么。

此外,当我实际尝试序列化一个对象时,了解它会做什么会很有帮助。

PS如果这个问题的答案可以涉及任何属性的处理,请随时编辑我的问题标题和问题以反映这一点。谢谢。

4

2 回答 2

2

公共语言运行时 (CLR) 管理对象在内存中的布局方式,.NET 框架通过使用反射提供自动序列化机制。当一个对象被序列化时,类名、程序集和类实例的所有数据成员都被写入存储。对象通常在成员变量中存储对其他实例的引用。当类被序列化时,序列化引擎会跟踪所有已经序列化的引用对象,以确保同一个对象不会被多次序列化。.NET Framework 提供的序列化体系结构自动正确处理对象图和循环引用。对对象图的唯一要求是,被序列化的对象引用的所有对象也必须标记为可序列化。如果不这样做,

本文的这一部分:http: //msdn.microsoft.com/en-us/library/ms973893.aspx

于 2011-03-04T19:01:39.523 回答
1

唯一会发生的事情就是这typeof(MyClass).IsSerializable将是真的。然后在代码中有一个声明if (!typeToBeSerialized.IsSerializable) throw ...,它执行实际的序列化。

于 2011-03-04T19:12:34.707 回答