昨晚和幾個哥們打字牌,打了個通宵,早上睡了2個多小時,發現精神還很抖擻(要是寫代碼有這麼給力...哎。碉堡了)。閒來無事,打開VS,coding總結了下.NET序列化:json
序列化定義:序列化是將對象狀態轉換爲可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換爲對象。這兩個過程結合起來,能夠輕鬆地存儲和傳輸數據。this
下面要介紹的是.net提供的序列化對象DataContractJsonSerializer,他主要是用於將對象轉化爲JSON格式數據以及將JSON反序列化爲對象。spa
直接上代碼吧,能夠直接在控制檯打印出結果:.net
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<User>(); 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<User> GetList() 38 { 39 List<User> list = new List<User>() { 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<string> GetString() 48 { 49 IList<string> strList = new List<string>(); 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 /// <summary> 72 /// 將對象轉化爲Json字符串 73 /// </summary> 74 /// <typeparam name="T">對象類型</typeparam> 75 /// <param name="instanse">對象自己</param> 76 /// <returns>JSON字符串</returns> 77 public static string ToJsonString<T>(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 /// <summary> 98 /// 將字符串轉化爲JSON對象,若是轉換失敗,返回default(T) 99 /// </summary> 100 /// <typeparam name="T">對象類型</typeparam> 101 /// <param name="s">字符串</param> 102 /// <returns>轉換值</returns> 103 public static T ToJsonObject<T>(this string s) 104 { 105 try 106 { 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 catch 118 { 119 return default(T); 120 } 121 } 122 }
運行結果:3d