序列化和反序列化

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();

posted @ 2013-11-25 21:15  聆听的风声  阅读(259)  评论(0)    收藏  举报