更新时间:2022-09-16 15:56:54
C# 序列化与反序列化
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;
using System.Runtime.Serialization;
public class SerializeAndDeserialize
{
//1、使用BinaryFormatter进行串行化
public void SerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
FileStream fileStream = new FileStream( "c:\\temp.dat" , FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fileStream, c);
fileStream.Close();
}
public void DeSerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
c.Sex = "kkkk" ;
FileStream fileStream = new FileStream( "c:\\temp.dat" , FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter b = new BinaryFormatter();
c = b.Deserialize(fileStream) as ClassToSerialize;
Console.WriteLine( "Output :" + c.name);
Console.WriteLine( "Output :" + c.id);
Console.WriteLine( "Output :" + c.Sex);
fileStream.Close();
}
// 2、使用SoapFormatter进行串行化
public void SerializeNow_Soap()
{
ClassToSerialize c = new ClassToSerialize();
FileStream fileStream = new FileStream( "c:\\temp2.dat" , FileMode.Create);
SoapFormatter s = new SoapFormatter();
s.Serialize(fileStream, c);
fileStream.Close();
}
public void DeSerializeNow_Soap()
{
ClassToSerialize c = new ClassToSerialize();
c.Sex = "kkkk" ;
FileStream fileStream = new FileStream( "c:\\temp2.dat" , FileMode.Open, FileAccess.Read, FileShare.Read);
SoapFormatter s = new SoapFormatter();
c = s.Deserialize(fileStream) as ClassToSerialize;
Console.WriteLine( "Output :" + c.name);
Console.WriteLine( "Output :" + c.id);
Console.WriteLine( "Output :" + c.Sex);
fileStream.Close();
}
//3、使用XmlSerializer进行串行化
public void XMLSerialize()
{
Person c = new Person( "cyj" );
c.Courses = new Course[2];
c.Courses[0] = new Course( "英语" , "交流工具" );
c.Courses[1] = new Course( "数学" , "自然科学" );
XmlSerializer xs = new XmlSerializer( typeof (Person));
Stream stream = new FileStream( "c:\\cyj.HTML" , FileMode.Create, FileAccess.Write, FileShare.Read);
xs.Serialize(stream, c);
stream.Close();
}
public void XMLDeserialize()
{
XmlSerializer xs = new XmlSerializer( typeof (Person));
Stream stream = new FileStream( "C:\\cyj.XML" , FileMode.Open, FileAccess.Read, FileShare.Read);
Person p = xs.Deserialize(stream) as Person;
Console.WriteLine( "Output :" + p.Name);
Console.WriteLine( "Output :" + p.Age.ToString());
Console.WriteLine( "Output :" + p.Courses[0].Name);
Console.WriteLine( "Output :" + p.Courses[0].Description);
Console.WriteLine( "Output :" + p.Courses[1].Name);
Console.WriteLine( "Output :" + p.Courses[1].Description);
stream.Close();
}
//4、自定义序列化
public void OtherEmployeeClassTest()
{
Employee mp = new Employee();
mp.EmpId = 10;
mp.EmpName = "邱枫" ;
mp.NoSerialString = "你好呀" ;
Stream steam = File.Open( "c:\\temp3.dat" , FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
Console.WriteLine( "Output :" + "Writing Employee Info:" );
bf.Serialize(steam, mp);
steam.Close();
mp = null ;
//反序列化
Stream steam2 = File.Open( "c:\\temp3.dat" , FileMode.Open);
BinaryFormatter bf2 = new BinaryFormatter();
Console.WriteLine( "Output :" + "Reading Employee Info:" );
Employee mp2 = (Employee)bf2.Deserialize(steam2);
steam2.Close();
Console.WriteLine( "Output :" + mp2.EmpId);
Console.WriteLine( "Output :" + mp2.EmpName);
Console.WriteLine( "Output :" + mp2.NoSerialString);
}
}
[Serializable]
public class ClassToSerialize
{
public int id = 100;
public string name = "Name" ;
[NonSerialized]
public string Sex = "男" ;
}
[Serializable]
public class Person
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Sex;
public int Age = 31;
public Course[] Courses;
public Person()
{
}
public Person( string Name)
{
name = Name;
Sex = "男" ;
}
}
[Serializable]
public class Course
{
public string Name;
[XmlIgnore]
public string Description;
public Course()
{
}
public Course( string name, string description)
{
Name = name;
Description = description;
}
}
[Serializable]
public class Employee : ISerializable
{
public int EmpId = 100;
public string EmpName = "work hard work smart work happy" ;
[NonSerialized]
public string NoSerialString = "NoSerialString-Test" ;
public Employee()
{
}
private Employee(SerializationInfo info, StreamingContext ctxt)
{
EmpId = ( int )info.GetValue( "EmployeeId" , typeof ( int ));
EmpName = (String)info.GetValue( "EmployeeName" , typeof ( string ));
}
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
info.AddValue( "EmployeeId" , EmpId);
info.AddValue( "EmployeeName" , EmpName);
}
}
|
C# 序列号与反序列化总结
1、 C# 序列化与反序列化(此文)
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/12/22/2297921.html,如需转载请自行联系原作者