C#序列化

  记得最开始的时候,刚一听说到“序列化”这个词的时候,哇。。。好高深。。。应该是什么很难懂的东西吧。。。想想过去的时候,觉得挺好笑的。虽然现在技术也不怎么滴,但是对于序列化也已经没有当初的那种“恐惧”了。。。

  序列化的方法,就我知道的有三种:

  (1)二进制序列化【二进制序列化是通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下。】

  (2)XML序列化 【XML序列化是通过XmlSerializer 类来实现的, 这个类位于System.Xml.Serialization命名空间下。】

  (3)SOAP序列化【SOAP序列化是通过SoapFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Soap命名空间下,并且需要注意需要手动添加对这个命名空间的引用,如图所示

  

 】

由于SoapFormatter类在.net3.5开始已经过时了,微软建议使用BinaryFormatter类来序列化和反序列化,所以我只写BinaryFormatter方法来序列化。

编写一个类用来序列化与反序列化:

[Serializable]      //在需要序列化的类上加上[Serializable]
class MySerializ
{
// [NonSerialized] //如果不想序列化某一个字段,加上[NonSerialized]
private string _name;
private string _address;

public string Name
{
get { return _name; }
set { _name = value; }
}

public string Address
{
get { return _address; }
set { _address = value; }
}

public override string ToString()
{
return "姓名:" + this._name + "...住址:" + this._address;
}
}

序列化和反序列化方法:

/// <summary>
/// 二进制序列化
/// </summary>
public static void BinarySerializ(MySerializ mySerializ)
{
using (FileStream stream = new FileStream(@"D:\test.dat", FileMode.Create, FileAccess.Write))
{
BinaryFormatter binary = new BinaryFormatter();
binary.Serialize(stream, mySerializ);
Console.WriteLine("已经序列化。。。");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");
}
}

/// <summary>
/// 二进制反序列化
/// </summary>
public static void BinaryDeserializ(string fileName)
{
using (FileStream stream = new FileStream(fileName,FileMode.Open,FileAccess.Read))
{
BinaryFormatter binary = new BinaryFormatter();
MySerializ mySerializ = (MySerializ)binary.Deserialize(stream);
Console.WriteLine(mySerializ.ToString());
}
}

完整代码

class Program
{
static void Main(string[] args)
{
MySerializ mySerializ = new MySerializ();
mySerializ.Name = "kelei";
mySerializ.Address = "中国";

//二进制序列化
try
{
BinarySerializ(mySerializ);
string path = @"D:\test.dat";
BinaryDeserializ(path);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

}
/// <summary>
/// 二进制序列化
/// </summary>
public static void BinarySerializ(MySerializ mySerializ)
{
using (FileStream stream = new FileStream(@"D:\test.dat", FileMode.Create, FileAccess.Write))
{
BinaryFormatter binary = new BinaryFormatter();
binary.Serialize(stream, mySerializ);
Console.WriteLine("已经序列化。。。");
Console.WriteLine("");
Console.WriteLine("");
Console.WriteLine("");
}
}

/// <summary>
/// 二进制反序列化
/// </summary>
public static void BinaryDeserializ(string fileName)
{
using (FileStream stream = new FileStream(fileName,FileMode.Open,FileAccess.Read))
{
BinaryFormatter binary = new BinaryFormatter();
MySerializ mySerializ = (MySerializ)binary.Deserialize(stream);
Console.WriteLine(mySerializ.ToString());
}
}
}
[Serializable] //在需要序列化的类上加上[Serializable]
class MySerializ
{
// [NonSerialized] //如果不想序列化某一个字段,加上[NonSerialized]
private string _name;
private string _address;

public string Name
{
get { return _name; }
set { _name = value; }
}

public string Address
{
get { return _address; }
set { _address = value; }
}

public override string ToString()
{
return "姓名:" + this._name + "...住址:" + this._address;
}
}



 

原文地址:https://www.cnblogs.com/kelei12399/p/2342928.html