使用Serializable
属性和实现ISerializable
接口有什么区别?
Answers:
当您使用SerializableAttribute
属性时,您将在编译时将属性放在字段上,以便在运行时,序列化工具将通过对类/模块/程序集进行反射来知道要基于属性序列化的内容类型。
[Serializable]
public class MyFoo { … }
上面指出了序列化工具应该序列化整个class MyFoo
,而:
public class MyFoo
{
private int bar;
[Serializable]
public int WhatBar
{
get { return this.bar; }
}
}
使用该属性,您可以有选择地选择需要序列化的字段。
当实现ISerializable
接口时,通过覆盖和(并通过提供form的构造函数)可以有效地使用自定义版本覆盖序列化,从而可以更好地控制数据的序列化。GetObjectData
SetObjectData
MyFoo(SerializationInfo info, StreamingContext context)
另请参见StackOverflow上的此自定义序列化示例。它显示了如何保持序列化与序列化数据的不同版本向后兼容。
希望这可以帮助。
Serializable
属性添加到属性中?MSDN说,它只能应用于类,结构,枚举和委托。
SerializableAttribute
,可以将成员标记NonSerializedAttribute
为要跳过,就像多人(和MSDN)所说的那样,当在不同的环境中重构某个对象没有意义时,最好不要序列化它。 ..
该SerializableAttribute指示做框架默认序列化过程。如果您需要更多控制权,则可以实现ISerializable接口。然后,您将使用自己的代码来序列化该GetObjectData
方法中的SerializationInfo
对象,并更新传递给它的对象。