.NET JSON對象序列化和反序列化

昨晚和幾個哥們打字牌,打了個通宵,早上睡了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

相關文章
相關標籤/搜索