专注

导航

序列化反序列化 (binary/xml) - 常用代码搜集,方便复用(转)

二进制序列化

首先。你被序列化的类需要用[Serializable]特性修饰,例如:

view plain

  1. [Serializable]  
  2. public class AA  
  3. {  
  4. public int i = 5;  

那么你可以用如下方法序列化和反序列化:

view plain

  1. ///  <summary>  
  2. ///  序列化为二进制字节数组  
  3. ///  </summary>  
  4. ///  <param  name="request">要序列化的对象 </param>  
  5. ///  <returns>字节数组 </returns>  
  6. public static byte[] SerializeBinary<T>(T request)  
  7. {  
  8.     System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();  
  9.     System.IO.MemoryStream memStream = new System.IO.MemoryStream();  
  10.     serializer.Serialize(memStream, request);  
  11. return memStream.GetBuffer();  
  12. }  
  13. ///  <summary>  
  14. ///  从二进制数组反序列化得到对象  
  15. ///  </summary>  
  16. ///  <param  name="buf">字节数组 </param>  
  17. ///  <returns>得到的对象 </returns>  
  18. public static T DeserializeBinary<T>(byte[] buf)  
  19. {  
  20.     System.IO.MemoryStream memStream = new MemoryStream(buf);  
  21.     memStream.Position = 0;  
  22.     System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer =  
  23. new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();  
  24.     T newobj = (T)deserializer.Deserialize(memStream);  
  25.     memStream.Close();  
  26. return newobj;  
  27. }  

调用方法

view plain

  1. AA p = new AA();  
  2. p.i = 15;  
  3. byte[] bytes = SerializeBinary<AA>(p);  
  4. AA p2 = DeserializeBinary<AA>(bytes); 

源自另一博客的一个非泛型序列化方法,将其修改为泛型写法,主要是方便自己查找。

原文地址:http://www.cnblogs.com/luckeryin/archive/2009/06/05/1496698.html

XML序列化

view plain

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Xml.Serialization;  
  6. using System.IO;  
  7. namespace RegexActivator  
  8. {  
  9. public class ExtendMethods  
  10.     {  
  11. public static void Serial<T>(T[] items, string path)  
  12.         {  
  13.             XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[]));  
  14.             TextWriter writer = new StreamWriter(path);  
  15. try
  16.             {  
  17.                 xmlSerializer.Serialize(writer, items);  
  18.             }  
  19. finally
  20.             {  
  21.                 writer.Close();  
  22.             }  
  23.         }  
  24. public static T[] Deserial<T>(string path)  
  25.         {  
  26. if (!File.Exists(path)) return new T[0];  
  27.             XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[]));  
  28.             FileStream fs = new FileStream(path, FileMode.Open);  
  29.             T[] items;  
  30. try
  31.             {  
  32.                 items = (T[])xmlSerializer.Deserialize(fs);  
  33.             }  
  34. finally
  35.             {  
  36.                 fs.Close();  
  37.             }  
  38. return items;  
  39.         }  
  40.     }  

c#序列化Hashtable的例子

view plain

  1. public void Test()  
  2. {  
  3.     Hashtable hash = new Hashtable();  
  4.     hash.Add(1, "one");  
  5.     hash.Add(2, "two");  
  6.     hash.Add(3, "three");  
  7.     hash.Add(4, "four");  
  8. //序列化
  9.     BinaryFormatter serializer = new BinaryFormatter();  
  10.     FileStream write_stream = new FileStream("my_hash.bin", FileMode.OpenOrCreate, FileAccess.Write);  
  11.     serializer.Serialize(write_stream, hash);  
  12.     write_stream.Close();  
  13. //反序列化
  14.     FileStream reade_stream = new FileStream("my_hash.bin", FileMode.Open, FileAccess.Read);  
  15.     BinaryFormatter deserializer = new BinaryFormatter();  
  16.     Hashtable newHash = (Hashtable)deserializer.Deserialize(reade_stream);  
  17.     reade_stream.Close();  
  18. foreach (var key in newHash.Keys)  
  19.     {  
  20.         Console.WriteLine("Key:" + key.ToString() + "/tValue:" + newHash[key].ToString());  
  21.     }  

posted on 2012-01-04 01:20  陈啊M  阅读(324)  评论(0编辑  收藏  举报