使用有什么区别Serializable
属性并实现ISerializable
界面?
当您使用SerializableAttribute http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx属性 您在编译时将属性放在字段上,这样在运行时,序列化工具将通过对类/模块/程序集类型执行反射来知道根据属性序列化什么。
[Serializable]
public class MyFoo { … }
上面表明序列化工具应该序列化整个类MyFoo
, 然而:
public class MyFoo
{
private int bar;
[Serializable]
public int WhatBar
{
get { return this.bar; }
}
}
使用该属性,您可以有选择地选择需要序列化的字段。
当您实施ISerializable界面 http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx,序列化有效地被自定义版本覆盖,通过覆盖GetObjectData http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.getobjectdata.aspx和SetObjectData
(并通过提供以下形式的构造函数MyFoo(SerializationInfo info, StreamingContext context)
),对数据的序列化会有更精细的控制。
也可以看看StackOverflow 上的自定义序列化示例 https://stackoverflow.com/questions/2121424/serializing-data-transfer-objects-in-net/2121517#2121517。它展示了如何保持序列化与序列化数据的不同版本向后兼容。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)