序列化和反序列化
1.创建序列化类:
public class Order { public Order() { } public Order(double toalPrice, Guid id) { this._totalPrice = toalPrice; this.ID = id; } private double _totalPrice; public Guid ID { get; set; } public DateTime Date { get; set; } public string Customer { get; set; } public string ShipAddress { get; set; } }
在上面定义Order类型中,特意定义了一个空的无参数构造函数,这个构造函数是必须的,因为反序列化的时候需要调用它创建对象。
2.创建序列化方法:
static void Serialize<T>(T instance, string fileName) { using (XmlWriter writer = new XmlTextWriter(fileName, Encoding.UTF8)) { XmlSerializer serializer = new XmlSerializer(typeof(T)); serializer.Serialize(writer, instance); } Process.Start(fileName); }
2.1创建可以自定义格式的序列化方法:
static void SerializeOther<T> (T instance, string fileName, string key) { XmlAttributes attributes = new XmlAttributes(); attributes.XmlAttribute = new XmlAttributeAttribute(key); XmlAttributeOverrides attributeOverrides = new XmlAttributeOverrides(); attributeOverrides.Add(typeof(T), key, attributes); XmlRootAttribute rootAttribute = new XmlRootAttribute("Ord"); XmlWriter write = new XmlTextWriter(fileName, Encoding.UTF8); XmlSerializer serializer = new XmlSerializer(typeof(Order), attributeOverrides, null, rootAttribute, "http://www.artch.com"); serializer.Serialize(write, instance); write.Close(); Process.Start("orderOther.xml"); }
调用序列化方法:
Order order = new Order(9000, Guid.NewGuid()) { Date= DateTime.Now, Customer = "张三", ShipAddress = "江苏省 苏州市 星湖街 328号"}; Serialize<Order>(order, "order.xml");
调用以后生成的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?> <Order xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ID>1e8701c3-8a4e-4323-ab00-67a583e2bba8</ID> <Date>2013-11-25T20:27:27.2633+08:00</Date> <Customer>张三</Customer> <ShipAddress>江苏省 苏州市 星湖街 328号</ShipAddress> </Order>
3.创建反序列化方法:
static Order Deserialize<T>(string fileName) { XmlReader reader = new XmlTextReader(fileName); XmlSerializer serializer = new XmlSerializer(typeof(T)); return (Order) serializer.Deserialize(reader) ; }
调用反序列化方法如下:
Order order = Deserialize<Order>("order.xml"); Console.WriteLine("ID:{0}\n Date:{1}\n Customer:{2}",order.ID,order.Date,order.Customer); Console.Read();