七星揽月

Efforts To Make The Best Of Their……
一口吃不出一个胖子,但胖子却是一口一口吃出来的,只要能每天坚持下来,我相信,一定会有收获的
每天进步一点点
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

.NET中的序列化与反序列化的问题

Posted on 2011-05-18 15:02  期星揽月  阅读(363)  评论(0编辑  收藏  举报

    前段时间,有朋友问我关于序列化的问题,当时写了个列子给他,也算是完成了需求,但事后觉得还是有必要整理一下序列化方面的东西,以便理解和运用.

     简单的概述序列化和反序列化就是:把对象转换为字节序列的过程就是序列化;把字节序列恢复为一个对象的过程就是反序列化.序列化的作用主要有两点,第一就是用于将对象写入硬盘来保存数据,第二就是用来在网络中传输数据.

     以下是我关于序列化写的一些实例方法,主要是对象的序列化与反序列化问题.

    

序列化
1 /// <summary>
2 /// create by 鄂溪子 on 2011-05-17
3 /// </summary>
4 public class SerializableCs
5 {
6 /// <summary>
7 /// 将类序列化为一个文件
8 /// </summary>
9 public void SerizlizableFile<T>(T obj)
10 {
11 IFormatter formatter = new BinaryFormatter();
12 Stream stream = new FileStream(@"c:\t.xml", FileMode.Create,FileAccess.Write, FileShare.None);
13 formatter.Serialize(stream, obj);
14 stream.Close();
15 }
16
17 /// <summary>
18 /// 将一个类文件反序列化
19 /// </summary>
20 public T DeserializeFile<T>(T obj)
21 {
22 IFormatter formatter = new BinaryFormatter();
23 Stream stream = new FileStream(@"c:\t.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
24 obj = (T)formatter.Deserialize(stream);
25 stream.Close();
26
27 return obj;
28 }
29
30 /// <summary>
31 /// 对象序列化为xml
32 /// </summary>
33 /// <typeparam name="T">需要序列化的对象类型</typeparam>
34 /// <param name="obj">将要序列化的对象,包括list集合</param>
35 /// <returns></returns>
36 public string ObjToXml<T>(T obj)
37 {
38 string resultstr = string.Empty;
39
40 if (obj != null)
41 {
42 try
43 {
44 using (StringWriter sw = new StringWriter())
45 {
46 XmlSerializer xz = new XmlSerializer(obj.GetType());
47 xz.Serialize(sw, obj);
48 resultstr = sw.ToString();
49 }
50 }
51 catch (Exception)
52 {
53 }
54
55 }
56 return resultstr;
57 }
58
59 /// <summary>
60 /// xml序列化为对象
61 /// </summary>
62 /// <typeparam name="T">对象类型</typeparam>
63 /// <param name="strxml">xml</param>
64 /// <returns>对象</returns>
65 public T XmlToObject<T>(string strxml)
66 {
67 if (strxml != null && strxml != string.Empty)
68 {
69 try
70 {
71 using (StringReader sr = new StringReader(strxml))
72 {
73 XmlSerializer xz = new XmlSerializer(typeof(T));
74 return ((T)xz.Deserialize(sr));
75 }
76 }
77 catch (Exception)
78 {
79 return default(T);
80 }
81
82 }
83 return default(T);
84
85 //该方法也可以将xml序列化为对象,但不能序列化为list集合
86 //using (MemoryStream stream = new MemoryStream())
87 //{
88 // using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
89 // {
90 // sw.Write(strxml);
91 // sw.Flush();
92 // stream.Seek(0, SeekOrigin.Begin);
93 // XmlSerializer serializer = new XmlSerializer(typeof(T));
94 // try
95 // {
96 // return ((T)serializer.Deserialize(stream));
97 // }
98 // catch (Exception)
99 // {
100 // return default(T);
101 // }
102 // }
103 //}
104 }
105
106 /// <summary>
107 /// 将对象或集合序列化为json
108 /// </summary>
109 /// <typeparam name="T"></typeparam>
110 /// <param name="obj"></param>
111 /// <returns></returns>
112 public string ObjToJosn<T>(T obj)
113 {
114 string resultjosn = string.Empty;
115
116 if (obj != null)
117 {
118 JavaScriptSerializer jss = new JavaScriptSerializer();
119 resultjosn = jss.Serialize(obj);
120 }
121
122 return resultjosn;
123 }
124
125 /// <summary>
126 /// 将json序列化为对象或集合
127 /// </summary>
128 /// <typeparam name="T"></typeparam>
129 /// <param name="josn"></param>
130 /// <returns></returns>
131 public T JosnToObj<T>(string josn)
132 {
133 if (josn != null && josn != string.Empty)
134 {
135 JavaScriptSerializer jss = new JavaScriptSerializer();
136 return ((T)jss.Deserialize(josn,typeof(T)));
137 }
138 return default(T);
139 }
140 }

以上代码,仅供参考.