什么是CLR在注释类型时“自动化”[serializable]?

时间:2011-03-04 18:56:42

标签: .net compiler-construction attributes serializable

据我所知,当您使用[serializable]注释类型时,它会告诉CLR此类型可以序列化。

我不喜欢这看起来像“黑匣子”魔术给我。我想知道当我用这个属性标记它时它做了什么。

另外,当我真正尝试序列化对象时,了解它的作用会很有帮助。

P.S。如果此问题的答案可能与处理任何属性有关,请随时编辑我的问题标题和问题以反映这一点。感谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

唯一发生的事情是typeof(MyClass).IsSerializable将是真的。然后在执行实际序列化的代码中有一条语句if (!typeToBeSerialized.IsSerializable) throw ...