Newtonsoft.Json反序列化php平台过来的json,支持php数组
1 using System;
2 using System.Text;
3 using System.Collections.Generic;
4 using Newtonsoft.Json;
5 using Newtonsoft.Json.Converters;
6 using Newtonsoft.Json.Linq;
7
8 namespace LightBlog.Data
9 {
10
11
12 ///<summary>
13 /// Json类,用于平台间数据交换的序列化和反序列化
14 ///</summary>
15 public class Json
16 {
17 private static JsonSerializerSettings _jsonSettings;
18 static Json()
19 {
20 IsoDateTimeConverter datetimeConverter = new IsoDateTimeConverter();
21 datetimeConverter.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
22 _jsonSettings = new JsonSerializerSettings();
23 _jsonSettings.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore;
24 _jsonSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
25 _jsonSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
26 _jsonSettings.Converters.Add(datetimeConverter);
27 }
28
29 ///<summary>
30 /// 把json字符串反序列化为对象
31 ///</summary>
32 ///<typeparam name="T">反序列化后的对象类型</typeparam>
33 ///<param name="jsonString">json格式字符串</param>
34 ///<param name="errorMsg">反序列过程中的错误信息</param>
35 ///<returns>返回反序列化后的对象类型</returns>
36 public static T DeserializeObject<T>(string jsonString,out string errorMsg)
37 {
38 T obj = default(T);//返回类型的默认值,T为引用类型时返回null,数值类型返回0
39 errorMsg = string.Empty;
40 try
41 {
42 obj = JsonConvert.DeserializeObject<T>(jsonString, _jsonSettings);
43 }
44 catch (Exception e)
45 {
46 errorMsg = e.Message;
47 obj = default(T);
48 }
49 return obj;
50 }
51
52 ///<summary>
53 /// 获取json字符串中特定的反序列化后的对象(对php数组中存在多个子数组,且每个子数组都不一样的情况)
54 ///</summary>
55 ///<typeparam name="T">反序列化后的对象</typeparam>
56 ///<param name="jsonString">json格式字符串</param>
57 ///<param name="key">json格式字符串中的项</param>
58 ///<param name="errorMsg">返回的反序列化过程中的错误信息</param>
59 ///<returns>反序列化后的对象</returns>
60 public static T DeserializeObject<T>(string jsonString, string key, out string errorMsg)
61 {
62 T obj = default(T);
63 errorMsg = string.Empty;
64 try
65 {
66 JObject jObj = JsonConvert.DeserializeObject(jsonString) as JObject;//转化为json对象数组
67 JToken token = jObj[key];//获取特定json对象
68 obj = token.ToObject<T>();//转化为返回对象
69 }
70 catch (Exception e)
71 {
72 errorMsg = e.Message;
73 obj = default(T);
74 }
75 return obj;
76 }
77
78 ///<summary>
79 /// 把对象序列化为json格式的字符串
80 ///</summary>
81 ///<typeparam name="T">需要序列化的对象类型</typeparam>
82 ///<param name="obj">需要序列化的对象</param>
83 ///<param name="errorMsg">序列化过程中的错误信息</param>
84 ///<returns>返回序列化后的字符串</returns>
85 public static string SerializeObject<T>(T obj,out string errorMsg)
86 {
87 string jsonString =string.Empty;
88 errorMsg = string.Empty;
89 try
90 {
91 jsonString = JsonConvert.SerializeObject(obj, Formatting.None, _jsonSettings);
92 }
93 catch (Exception e)
94 {
95 errorMsg = e.Message;
96 obj = default(T);
97 }
98 return jsonString;
99 }
100 }
101 }
最后一个方法是序列化对象