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