.NET JSON对象序列化和反序列化
面要介绍的是.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<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 }
运行结果: