昨晚和几个哥们打字牌,打了个通宵,早上睡了2个多小时,发现精神还很抖擞(要是写代码有这么给力...哎。碉堡了)。闲来无事,打开VS,coding总结了下.NET序列化:
序列化定义:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
下面要介绍的是.net提供的序列化对象DataContractJsonSerializer,他主要是用于将对象转化为JSON格式数据以及将JSON反序列化为对象。
直接上代码吧,可以直接在控制台打印出结果:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("============================序列化单个对象为JSON格式======================================================"); 6 var jsonObj = GetUser().ToJsonString(); 7 Console.WriteLine(jsonObj + "\n\r "); 8 9 Console.WriteLine("============================序列化集合对象为JSON格式======================================================"); 10 var jsonListObj = GetList().ToJsonString(); 11 Console.WriteLine(jsonListObj + "\n\r "); 12 13 Console.WriteLine("============================序列化字符串集合======================================================"); 14 var jsonStrObj = GetString().ToJsonString(); 15 Console.WriteLine(jsonStrObj + "\n\r "); 16 17 Console.WriteLine("============================构建一个JSON对象,反序列化为User对象==================================="); 18 //构建JSON对象 19 string str = "{\"Description\":\"少林袈裟旗舰店店长\",\"Id\":\"1\",\"Name\":\"少林扫地神僧\"}"; 20 var user = str.ToJsonObject(); 21 var entityObj = string.Format("json format str convert to user object:Id={0},Name={1},Description={2}", user.Id, user.Name, user.Description); 22 Console.WriteLine(entityObj); 23 Console.ReadKey(); 24 } 25 26 public static User GetUser() 27 { 28 User user = new User() 29 { 30 Id = 1, 31 Name = "无崖子", 32 Description = "逍遥派掌门" 33 }; 34 return user; 35 } 36 37 public static List GetList() 38 { 39 List list = new List () { 40 new User(){ Id=1,Name="丁春秋", Description="星宿派掌门"}, 41 new User(){ Id=2,Name="庄聚贤", Description="无所事事的帅哥"}, 42 new User(){ Id=3,Name="段正淳", Description="风流倜傥大理王爷"}}; 43 return list; 44 } 45 46 47 public static IList GetString() 48 { 49 IList strList = new List (); 50 strList.Add("乔峰"); 51 strList.Add("段誉"); 52 strList.Add("虚竹"); 53 return strList; 54 } 55 } 56 57 58 public class User 59 { 60 public int Id { get; set; } 61 62 public string Name { get; set; } 63 64 public string Description { get; set; } 65 } 66 67 68 69 public static class StringExtensions 70 { 71 /// 72 /// 将对象转化为Json字符串 73 /// 74 ///对象类型 75 /// 对象本身 76 ///JSON字符串 77 public static string ToJsonString(this T instanse) 78 { 79 try 80 { 81 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(T)); 82 using (MemoryStream ms = new MemoryStream()) 83 { 84 js.WriteObject(ms, instanse); 85 ms.Flush(); 86 ms.Seek(0, SeekOrigin.Begin); 87 StreamReader sr = new StreamReader(ms); 88 return sr.ReadToEnd(); 89 } 90 } 91 catch 92 { 93 return String.Empty; 94 } 95 } 96 97 /// 98 /// 将字符串转化为JSON对象,如果转换失败,返回default(T) 99 /// 100 ///对象类型 101 /// 字符串102 ///转换值 103 public static T ToJsonObject(this string s)104 {105 try106 {107 DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(T));108 using (MemoryStream ms = new MemoryStream())109 {110 StreamWriter sw = new StreamWriter(ms);111 sw.Write(s);112 sw.Flush();113 ms.Seek(0, SeekOrigin.Begin);114 return (T)js.ReadObject(ms);115 }116 }117 catch118 {119 return default(T);120 }121 }122 }
运行结果: