C# XML 序列化 及 反序列化
百科:序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
public class Dog
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public string ReturnString()
{
return Id + " " + Name + " " + Sex + " " + Age;
}
}
class Program
{
static void Main(string[] args)
{
List<Dog> list = new List<Dog>()
{
new Dog(){Id=1,Name="旺财",Sex="男",Age=2},
new Dog(){Id=2,Name="哈士奇",Sex="女",Age=4},
new Dog(){Id=3,Name="藏獒",Sex="男",Age=5},
};
//序列化
string xml = XmlSerialize<List<Dog>>(list);
Console.WriteLine("*********** 类--> XML ************");
Console.WriteLine(xml);
//反序列化
string strXML = "<ArrayOfDog><Dog><Id>1</Id><Name>旺财</Name><Sex>男</Sex><Age>2</Age></Dog><Dog><Id>2</Id><Name>哈士奇</Name><Sex>女</Sex><Age>4</Age></Dog><Dog><Id>3</Id><Name>藏獒</Name><Sex>男</Sex><Age>5</Age></Dog></ArrayOfDog>";
List<Dog> listDog = DESerializer<List<Dog>>(strXML);
Console.WriteLine("*********** XML--> 类 ************");
foreach (Dog dog in listDog)
{
Console.WriteLine(dog.ReturnString());
}
Console.ReadKey();
}
/// <summary>
/// 反序列化
/// </summary>
public static T DESerializer<T>(string strXML) where T : class
{
try
{
using (StringReader sr = new StringReader(strXML))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return serializer.Deserialize(sr) as T;
}
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 序列化
/// </summary>
public static string XmlSerialize<T>(T obj)
{
using (StringWriter sw = new StringWriter())
{
Type t = obj.GetType();
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(sw, obj);
sw.Close();
return sw.ToString();
}
}
}
C# 序列化与反序列化意义详解:
①序列化基本是指把一个对象保存到文件或流中,比如可以把文件序列化以保存到Xml中,或一个磁盘文件中
②序列化以某种存储形式使自定义对象持久化;
③将对象从一个地方传递到另一个地方。
④将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。
⑥序列是指将对象的实例状态存储到存储媒体的过程。
在此过程中,先将对象的公共字段以及类的名称(包括类的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
⑦用处非常大,用于数据传输,对象存贮等。