Serialization in C#
来源:互联网 发布:易语言整人关机源码 编辑:程序博客网 时间:2024/05/16 05:07
在C#中创建新的类型时最好让这个类型支持序列化,尤其是你的这个类型要提供给别的程序员使用的时候。而在C#中使你的类型支持序列化是非常简单的事情,使用[Serializable]属性就可以了:
[Serializable]
public class MyType
{
private string _label;
private int _value;
}
当你的类中的成员变量是基本类型时,他们自动支持序列化;但如果成员变量中使用了其他新的类,那么这个类变量自己就必须要支持序列化,这就是为什么当我们自己设计新的类时要支持序列化的原因。
有时候某些变量只是储存的中间结果,那我们的确不需要对这些变量进行序列化,这时我们可以使用[NonSerialized]属性:
[Serializable]
public class MyType
{
private string _label;
[NonSerialized]
private int _cachedValue;
private OtherClass _object;
}
而这样就需要我们做更多的事情了,例如在deserialization的过程中就要考虑初始化这些变量的问题,这时就要通过实现IDeserializationCallback接口的OnDeserialization方法来做这些事情。
另外,如果我们的类在发布之后又做了修改,加入了新的成员变量,那么为了和以前已经序列化的实例兼容,我们就不得不做更多的事情。例如,更新后的一个类定义如下:
[Serializable]
public class MyType
{
private string _label;
[NonSerialized]
private int _value;
private OtherClass _object;
// Added in version 2
// The runtime throws Exceptions
// with it finds this field missing in version 1.0
// files.
private int _value2;
}
为了处理新的变量_value2,我们要实现ISerializable接口
using System.Runtime.Serialization;
using System.Security.Permissions;
[Serializable]
public sealed class MyType : ISerializable
{
private string _label;
[NonSerialized]
private int _value;
private OtherClass _object;
private const int DEFAULT_VALUE = 5;
private int _value2;
// public constructors elided.
// Private constructor used only by the Serialization
framework.
private MyType( SerializationInfo info,
StreamingContext cntxt )
{
_label = info.GetString( "_label" );
_object = ( OtherClass )info.GetValue( "_object", typeof
( OtherClass ));
try {
_value2 = info.GetInt32( "_value2" );
} catch ( SerializationException e )
{
// Found version 1.
_value2 = DEFAULT_VALUE;
}
}
- Serialization in C#
- Object Serialization in C#
- Quick JSON Serialization/Deserialization in C#
- Tricks of Serialization in Unity/C#
- Serialization from an Object to XML Document in C#
- XML Serialization Using C#
- Object Serialization using C#
- Paracle VS Serialization in android
- Serialization in PHP(序列化 in PHP)
- serialization
- Serialization
- Serialization
- Serialization
- Serialization
- Serialization
- Serialization
- Cross-browser JSON Serialization in JavaScript
- JSON Serialization and Deserialization in ASP.Net
- 再谈后台调用外部程序的完美实现
- [转帖]了解AOP
- AOP 解决紧密耦合的难题
- 2005-7-1关于C#中委托的使用
- Eclipse中编辑JavaScript文件(js文件)中文乱码的问题
- Serialization in C#
- 求高手指点(问题比较罕见)
- 出得厅堂入得厨房之王国维可以休矣(2005高考作文湖北0分卷)
- ASP服务器组件的编程
- 将近一年了,很少来更新自己的blog,这几天要多浇浇水了:)
- IT从业人员必看的10个论坛(转)
- 软件工程师的务实职业生涯规划 (转)
- C++完成端口组件实现
- vi使用说明