刚刚碰巧群里有人问这个问题,而之前的博客中并没有提及,打算弄一篇博客简单提及一下这个知识点。
MSDN文档中提及了序列化、反序列化的概念,这里引用一下。
序列化:将对象状态转换为可保持或传输的形式的过程。
反序列化:是序列化的逆过程,就是将流转换为对象的过程。
这两个过程一起保证数据易于传输和存储。
详细的请参考:http://msdn.microsoft.com/zh-cn/library/7ay27kt9(v=vs.100).aspx。
下面直接给出完整的代码,该代码演示了如何序列化一个对象以及反序列化(还原对象)的过程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
namespace
ConsoleApplication1
{
class
Program
{
static
void
Main(
string
[] args)
{
Object student =
new
Student() { StudentID =
"007"
, StudentName =
"guwei4037"
};
string
result = ObjectToString<Object>(student);
Console.WriteLine(result +
"\r\n"
);
Student newResult = StringToObject<Student>(result);
Console.WriteLine(
"ID:{0}, Name:{1}"
, newResult.StudentID, newResult.StudentName);
}
/// <summary>
/// 对象转字符串(序列化后转Base64编码字符串)
/// </summary>
/// <param name="obj">对象</param>
/// <returns>字符串</returns>
public
static
string
ObjectToString<T>(T obj)
{
using
(MemoryStream stream =
new
MemoryStream())
{
IFormatter formatter =
new
BinaryFormatter();
formatter.Serialize(stream, obj);
stream.Position = 0;
byte
[] buffer =
new
byte
[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return
Convert.ToBase64String(buffer);
}
}
/// <summary>
/// 字符串转对象(Base64编码字符串反序列化为对象)
/// </summary>
/// <param name="str">字符串</param>
/// <returns>对象</returns>
public
static
T StringToObject<T>(
string
str)
{
using
(MemoryStream stream =
new
MemoryStream())
{
byte
[] bytes = Convert.FromBase64String(str);
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
IFormatter formatter =
new
BinaryFormatter();
return
(T)formatter.Deserialize(stream);
}
}
}
/// <summary>
/// 可序列化的类,用Serializable标示此类可序列化
/// </summary>
[Serializable]
public
class
Student
{
public
string
StudentID {
get
;
set
; }
public
string
StudentName {
get
;
set
; }
}
}
|
运行结果截图:
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1433886