C# 序列化、反序列化

简介:

刚刚碰巧群里有人问这个问题,而之前的博客中并没有提及,打算弄一篇博客简单提及一下这个知识点。

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
相关文章
|
2月前
|
存储 XML JSON
数据传输的艺术:深入探讨序列化与反序列化
数据传输的艺术:深入探讨序列化与反序列化
60 0
|
2月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
12 0
|
1月前
|
JSON 安全 Java
Spring Boot 序列化、反序列化
本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
47 2
|
2天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
6 0
|
3天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
19 2
|
5天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
12天前
|
存储 JSON PHP
python序列化与反序列化
python序列化与反序列化
|
14天前
|
存储 Java 测试技术
滚雪球学Java(22):序列化和反序列化
【4月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
33 1
滚雪球学Java(22):序列化和反序列化
|
17天前
|
SQL 存储 安全
每日一道面试题:Java中序列化与反序列化
每日一道面试题:Java中序列化与反序列化
11 0
|
27天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
28 5