zoukankan      html  css  js  c++  java
  • .NET JSON对象序列化和反序列化

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

    昨晚和几个哥们打字牌,打了个通宵,早上睡了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 + "
    
     ");
      8           
      9             Console.WriteLine("============================序列化集合对象为JSON格式======================================================");
     10             var jsonListObj = GetList().ToJsonString();
     11             Console.WriteLine(jsonListObj + "
    
     ");
     12          
     13             Console.WriteLine("============================序列化字符串集合======================================================");
     14             var jsonStrObj = GetString().ToJsonString();
     15             Console.WriteLine(jsonStrObj + "
    
     ");
     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     }
    复制代码

    运行结果:

     
     
    分类: C#.NET
  • 相关阅读:
    RTOS双向链表数据结构
    [LintCode] Majority Number(以时间复杂度O(n)求主元素)
    [LintCode] Median(期望时间复杂度O(n)求中位数和第k大数)
    [LintCode]unique paths with obstacles
    [LintCode]unique paths
    [LintCode]sqrt(x)
    排序算法(C++实现)
    优先队列C++实现
    散列之分离链接法
    AVL树C++实现
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3222094.html
Copyright © 2011-2022 走看看