C#序列化和反序列化

来源:互联网 发布:ubuntu php编译 编辑:程序博客网 时间:2024/04/29 10:48

C#序列化和反序列化

系列化是将对象写入流的过程,而反序列化是从流中读取对象的过程。在类上使用[Serializable]属性标注为可序列化,用[NoSerializable]标注某变量不可被序列化。
有时候在程序中徐希望将一个变量序列化,却希望在反序列化的时候可以得到这个对象进行的操作,而得到没有被序列化的变量,这是可以通过执行Ideserialization CallBack接口来实现。该接口只包含了一个方法:
void OnDeserialization(Object sender)

一个简单的例子如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;namespace ConsoleApplication1{    [Serializable]    class Add : IDeserializationCallback    {        private int num1;        private int num2;        [NonSerialized]        private int sum;        public Add() { }        public Add(int num1, int num2)        {            this.num1 = num1;            this.num2 = num2;        }        public int Apply()        {            sum = num1 + num2;            return sum;        }        public int Result        {            get {                return sum;            }        }        public void OnDeserialization(Object sender)        {            sum = num1 + num2;        }    }    class Program    {        static void Main(string[] args)        {            Add add = new Add(1,2);            add.Apply();            FileStream fs = new FileStream("c:\\c-sharp.txt",FileMode.OpenOrCreate);            BinaryFormatter binFormatter = new BinaryFormatter();            Console.WriteLine("object serializable ...");            binFormatter.Serialize(fs, add);            fs.Position = 0;            Console.WriteLine("deserializable ...");            Add sum = (Add)binFormatter.Deserialize(fs);            Console.WriteLine("Add.sum=" + sum.Result);            //sum.Apply();            Console.WriteLine("1+2="+sum.Result);        }    }}


原创粉丝点击