欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 序列化和反序列化

程序员文章站 2022-06-16 08:35:30
...
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;//一个格式

//C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Runtime.Serialization.Formatters.Soap.dll
[Serializable]//特性标签    ,标注该类可序列化,序列化前的标签
public  class 原生类//声明一个将要被序列化的类,[Serializable]标志该类的对象可以被序列化。
{
    public int intNumber = 254;
    public string strDemo = "This is a test string";
    public long lngNumber = 123456;
}

public class DeMo //例子
{
    public static void Main()
    {
        DeMo mySerializable = new DeMo(); 
        原生类 myClsSerializable = new 原生类();

        mySerializable.SerializeBinary(myClsSerializable);//调用定义的序列化方法并写入数据流
        mySerializable.SerializeSoap(myClsSerializable);//xml
        mySerializable.PrintObject();

        Console.Read();
    }

    //序列化为Binary,并将数据流写入文本sbinary.txt
    private void SerializeBinary(原生类 原生对象)
    {
        FileStream myFileStream =
        new FileStream(@"d:\sbinary.txt", FileMode.Create);//产生一个文本存放序列化之后的数据流

        BinaryFormatter myBFormatter = new BinaryFormatter();//产生一个序列化类的对象
        Console.WriteLine("开始进行二进制格式序列化.......");
        myBFormatter.Serialize(myFileStream, 原生对象);//开始序列化并写入文本
        Console.WriteLine("序列化完成,数据保存于文本文件sbinary.txt..");
        myFileStream.Close();
    }

    //序列化为Soap,并将数据流写入文本ssoap.txt  //xml
    private void SerializeSoap(原生类 原生对象)
    {
        FileStream myFileStream =
            new FileStream(@"d:\ssoap.txt", FileMode.Create);
        SoapFormatter myBFormatter = new SoapFormatter();

        Console.WriteLine("开始进行 SOAP 格式序列化....");
        myBFormatter.Serialize(myFileStream, 原生对象);
        Console.WriteLine("序列化完成,数据保存于文本文件 ssoap.txt...");
        myFileStream.Close();
    }
    //
    private 原生类 BinaryDeSerialize()
    {
        原生类 原生对象;//声明被序列化类的对象
        FileStream myFileStream =
            new FileStream(@"d:\sbinary.txt", FileMode.Open);
        BinaryFormatter myBFormatter = new BinaryFormatter();

        Console.WriteLine("开始还原序列化对象.......");
        原生对象 =((原生类)(myBFormatter.Deserialize(myFileStream)));//将文件中的数据流反序列化后赋值给类的对象o
        //Serialize  Deserialize
        Console.WriteLine("\n Binary对象完成还原.......如下:");

        myFileStream.Close();
        return 原生对象;
    }

    //
    private 原生类 SoapDeSerialize()
    {
        原生类 原生对象;//声明被序列化类的对象
        FileStream myFileStream =
            new FileStream(@"d:\ssoap.txt", FileMode.Open);
        SoapFormatter myBFormatter = new SoapFormatter();

        Console.WriteLine("开始还原序列化对象.......");
        原生对象 = ((原生类)myBFormatter.Deserialize(myFileStream));//将文件中的数据流反序列化后赋值给类的对象o
        Console.WriteLine("\n Soap对象完成还原.......如下:");
        myFileStream.Close();
      
        return 原生对象;
       
    }

    private void PrintObject()
    {
        DeMo mySerializable = new DeMo();
        原生类 原生类的对象 =
                    mySerializable.BinaryDeSerialize();//调用这个方法返回一个原生类对象
       
        Console.WriteLine("属性值 intNumber : {0} ", 
 						原生类的对象.intNumber);
        Console.WriteLine("属性值 strDemo : {0} ",
 						原生类的对象.strDemo);
        Console.WriteLine("属性值 lngNumber : {0} ", 
 						原生类的对象.lngNumber);


        原生类 原生类的对象01 =
               mySerializable.SoapDeSerialize();
        Console.WriteLine("属性值 intNumber : {0} ",
                        原生类的对象01.intNumber);
        Console.WriteLine("属性值 strDemo : {0} ",
                        原生类的对象01.strDemo);
        Console.WriteLine("属性值 lngNumber : {0} ",
                        原生类的对象01.lngNumber);
    }
}

 

相关标签: C#