序列化与反序列化

 1  #region 序列化
 2         public static string Serializer<T>(T t)
 3         {
 4             //StringBuilder sb = new StringBuilder();
 5             using (MemoryStream ms = new MemoryStream())
 6             {
 7                 using (System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(ms, Encoding.UTF8))
 8                 {
 9                     XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
10                     string name = t.GetType().Name;
11 
12                     XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
13                     //Add an empty namespace and empty value
14                     ns.Add("", "");
15 
16                     XmlSerializer xmlSerializer = xmlSerializerFactory.CreateSerializer(typeof(T));
17 
18                     xmlSerializer.Serialize(xw, t);
19 
20                     // 去除BOM
21                     byte[] buffer = ms.ToArray();
22 
23                     if (buffer.Length <= 3)
24                     {
25                         return Encoding.UTF8.GetString(buffer);
26                     }
27                     byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };
28                     if (buffer[0] == bomBuffer[0] && buffer[1] == bomBuffer[1] && buffer[2] == bomBuffer[2])
29                     {
30                         return Encoding.UTF8.GetString(buffer, 3, buffer.Length - 3);
31                     }
32                     return Encoding.UTF8.GetString(buffer);
33                 }
34             }
35         }
36         #endregion
37 
38         #region 反序列化
39         public static T Deserialize<T>(string xml)
40         {
41             using (StringReader reader = new StringReader(xml))
42             {
43                 XmlSerializer xs = new XmlSerializer(typeof(T));
44                 T obj = (T)xs.Deserialize(reader);
45                 return obj;
46             }
47         }
48         #endregion

 

posted @ 2019-09-23 22:00  醉酒三分醒  阅读(174)  评论(0编辑  收藏  举报