C#序列化和反序列化

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);
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值