using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;
namespace TestSerializable
{
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public char Gender { get; set; }
public Person() { }
public Person(string name,int age,char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
}
class Program
{
static void Main(string[] args)
{
//BinaryFormatter();
//SoapFormatter();
//XmlSerializer();
ObjSerializer();
}
/// <summary>
/// 保存成二进制数据流
/// </summary>
public static void BinaryFormatter()
{
//序列化
Person p = new Person("Mond", 21, '男');
using (FileStream stream = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();
//public void Serialize(Stream serializationStream, object graph);
bf.Serialize(stream, p);
}
//反序列化
using (FileStream stream2 = new FileStream("test.txt", FileMode.Open, FileAccess.Read))
{
BinaryFormatter bf2 = new BinaryFormatter();
//public object Deserialize(Stream serializationStream);
Person p2 = (Person)bf2.Deserialize(stream2);
Console.WriteLine(p2.Name+"\n"+p2.Age+"\n"+p2.Gender);
Console.ReadLine();
}
}
/// <summary>
/// 保存成xml //需要添加引用System.Runtime.Serialization.Formatters.Soap;
/// </summary>
public static void SoapFormatter()
{
//序列化
Person p = new Person("Mond", 21, '男');
using (FileStream stream = new FileStream("test.xml", FileMode.OpenOrCreate, FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();
//public void Serialize(Stream serializationStream, object graph);
bf.Serialize(stream, p);
}
//反序列化
using (FileStream stream2 = new FileStream("test.xml", FileMode.Open, FileAccess.Read))
{
SoapFormatter bf2 = new SoapFormatter();
//public object Deserialize(Stream serializationStream);
Person p2 = (Person)bf2.Deserialize(stream2);
Console.WriteLine(p2.Name + "\n" + p2.Age + "\n" + p2.Gender);
Console.ReadLine();
}
}
/// <summary>
/// 保存成xml
/// </summary>
public static void XmlSerializer()
{
//序列化
Person person = new Person("Mond", 21, 'y');
XmlSerializer ser = new XmlSerializer(person.GetType());
ser.Serialize(new FileStream(@"test.xml", FileMode.Create), person);
////反序列化
//XmlSerializer ser = new XmlSerializer(typeof(Person));
//Person person = (Person)ser.Deserialize(new FileStream(@"test.xml", FileMode.Open));
//Console.WriteLine(person.Name + "\n" + person.Age + "\n" + person.Gender);
//Console.ReadLine();
}
/// <summary>
/// 这个文件是把obj对象序列化后持久化存储的文件
/// </summary>
public static void ObjSerializer()
{
//序列化Person
Person obj = new Person();
obj.Gender = '1';
obj.Age = 24;
obj.Name = "一些字符串";
IFormatter formatter = new BinaryFormatter();
Stream MyStream = new FileStream("test.bin", FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(MyStream, obj);
MyStream.Close();
////反序列化Person
//IFormatter formatter = new BinaryFormatter();
//Stream MyStream = new FileStream("test.bin", FileMode.Open,
//FileAccess.Read, FileShare.Read);
//Person obj = (Person)formatter.Deserialize(MyStream);
//Console.WriteLine(obj.Name);
//MyStream.Close();
//Console.ReadLine();
}
}
}
C#中序列化与反序列化实例
猜你喜欢
转载自blog.csdn.net/qq_39081464/article/details/81225216
今日推荐
周排行