1.引用Newtonsoft.Json庫(kù)(JSON.NET)。
2.復(fù)制粘貼JsonHelper吧。
源代碼:
using System;using System.Collections.Generic;using System.Linq;using Newtonsoft.Json;using Newtonsoft.Json.Converters;namespace Allen.Core{ public static partial class JsonHelper { #region PRivate fields private static readonly JsonSerializerSettings JsonSettings; private const string EmptyJson = "[]"; #endregion #region Constructor static JsonHelper() { var datetimeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" }; JsonSettings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore, NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Ignore }; JsonSettings.Converters.Add(datetimeConverter); } #endregion #region Public Methods /// <summary> /// 應(yīng)用Formatting.None和指定的JsonSerializerSettings設(shè)置,序列化對(duì)象到JSON格式的字符串 /// </summary> /// <param name="obj">任意一個(gè)對(duì)象</param> /// <param name="jsonSettings">在一個(gè) Newtonsoft.Json.JsonSerializer 對(duì)象上指定設(shè)置,如果為null,則使用默認(rèn)設(shè)置</param> /// <returns>標(biāo)準(zhǔn)的JSON格式的字符串</returns> public static string ToJson(object obj, JsonSerializerSettings jsonSettings) { return ToJson(obj, Formatting.None, jsonSettings); } /// <summary> /// 應(yīng)用指定的Formatting枚舉值None和指定的JsonSerializerSettings設(shè)置,序列化對(duì)象到JSON格式的字符串 /// </summary> /// <param name="obj">任意一個(gè)對(duì)象</param> /// <param name="format">指定 Newtonsoft.Json.JsonTextWriter 的格式設(shè)置選項(xiàng)</param> /// <param name="jsonSettings">在一個(gè) Newtonsoft.Json.JsonSerializer 對(duì)象上指定設(shè)置,如果為null,則使用默認(rèn)設(shè)置</param> /// <returns>標(biāo)準(zhǔn)的JSON格式的字符串</returns> public static string ToJson(object obj, Formatting format, JsonSerializerSettings jsonSettings) { try { return obj == null ? EmptyJson : JsonConvert.SerializeObject(obj, format, jsonSettings ?? JsonSettings); } catch (Exception) { //TODO LOG return EmptyJson; } } /// <summary> /// 應(yīng)用Formatting.None和指定的JsonSerializerSettings設(shè)置,反序列化JSON數(shù)據(jù)為dynamic對(duì)象 /// <para>如果發(fā)生JsonSerializationException異常,再以集合的方式重試一次,取出集合的第一個(gè)dynamic對(duì)象。</para> /// <para>轉(zhuǎn)換失敗,或發(fā)生其它異常,則返回dynamic對(duì)象的默認(rèn)值</para> /// </summary> /// <param name="json">需要反序列化的JSON字符串</param> /// <param name="jsonSettings">在一個(gè) Newtonsoft.Json.JsonSerializer 對(duì)象上指定設(shè)置,如果為null,則使用默認(rèn)設(shè)置</param> /// <returns>dynamic對(duì)象</returns> public static dynamic FromJson(this string json, JsonSerializerSettings jsonSettings) { return FromJson<dynamic>(json, Formatting.None, jsonSettings); } /// <summary> /// 應(yīng)用指定的Formatting枚舉值None和指定的JsonSerializerSettings設(shè)置,反序列化JSON數(shù)據(jù)為dynamic對(duì)象 /// <para>如果發(fā)生JsonSerializationException異常,再以集合的方式重試一次,取出集合的第一個(gè)dynamic對(duì)象。</para> /// <para>轉(zhuǎn)換失敗,或發(fā)生其它異常,則返回dynamic對(duì)象的默認(rèn)值</para> /// </summary> /// <param name="json">需要反序列化的JSON字符串</param> /// <param name="format">指定 Newtonsoft.Json.JsonTextWriter 的格式設(shè)置選項(xiàng)</param> /// <param name="jsonSettings">在一個(gè) Newtonsoft.Json.JsonSerializer 對(duì)象上指定設(shè)置,如果為null,則使用默認(rèn)設(shè)置</param> /// <returns>dynamic對(duì)象</returns> public static dynamic FromJson(this string json, Formatting format, JsonSerializerSettings jsonSettings) { return FromJson<dynamic>(json, format, jsonSettings); } /// <summary> /// 應(yīng)用Formatting.None和指定的JsonSerializerSettings設(shè)置,反序列化JSON數(shù)據(jù)到指定的.NET類型對(duì)象 /// <para>如果發(fā)生JsonSerializationException異常,再以集合的方式重試一次,取出集合的第一個(gè)T對(duì)象。</para> /// <para>轉(zhuǎn)換失敗,或發(fā)生其它異常,則返回T對(duì)象的默認(rèn)值</para> /// </summary> /// <param name="json">需要反序列化的JSON字符串</param> /// <param name="jsonSettings">在一個(gè) Newtonsoft.Json.JsonSerializer 對(duì)象上指定設(shè)置,如果為null,則使用默認(rèn)設(shè)置</param> /// <typeparam name="T">反序列化對(duì)象的類型</typeparam> /// <returns></returns> public static T FromJson<T>(string json, JsonSerializerSettings jsonSettings) where T : class, new() { return FromJson<T>(json, Formatting.None, jsonSettings); } /// <summary> /// 應(yīng)用指定的Formatting枚舉值None和指定的JsonSerializerSettings設(shè)置,反序列化JSON數(shù)據(jù)到指定的.NET類型對(duì)象 /// <para>如果發(fā)生JsonSerializationException異常,再以集合的方式重試一次,取出集合的第一個(gè)T對(duì)象。</para> /// <para>轉(zhuǎn)換失敗,或發(fā)生其它異常,則返回T對(duì)象的默認(rèn)值</para> /// </summary> /// <param name="json">需要反序列化的JSON字符串</param> /// <param name="format">指定 Newtonsoft.Json.JsonTextWriter 的格式設(shè)置選項(xiàng)</param> /// <param name="jsonSettings">在一個(gè) Newtonsoft.Json.JsonSerializer 對(duì)象上指定設(shè)置,如果為null,則使用默認(rèn)設(shè)置</param> /// <typeparam name="T">反序列化對(duì)象的類型</typeparam> /// <returns></returns> public static T FromJson<T>(string json, Formatting format, JsonSerializerSettings jsonSettings) where T : class, new() { T result; if (jsonSettings == null) { jsonSettings = JsonSettings; } try { result = string.IsNullOrWhiteSpace(json) ? default(T) : JsonConvert.DeserializeObject<T>(json, jsonSettings); } catch (JsonSerializationException) //在發(fā)生該異常后,再以集合的方式重試一次. { //LOG try { var array = JsonConvert.DeserializeObject<IEnumerable<T>>(json, jsonSettings); result = array.FirstOrDefault(); } catch (Exception) { //LOG result = default(T); } } catch (Exception) { //LOG result = default(T); } return result; } #endregion #region Public Extend Methods /// <summary> /// 反序列化JSON數(shù)據(jù)為dynamic對(duì)象 /// <para>如果發(fā)生JsonSerializationException異常,再以集合的方式重試一次,取出集合的第一個(gè)dynamic對(duì)象。</para> /// <para>轉(zhuǎn)換失敗,或發(fā)生其它異常,則返回dynamic對(duì)象的默認(rèn)值</para> /// </summary> /// <param name="json">需要反序列化的JSON字符串</param> /// <returns>dynamic對(duì)象</returns> public static dynamic FromJson(this string json) { return FromJson<dynamic>(json, Formatting.None, JsonSettings); } /// <summary> /// 反序列化JSON數(shù)據(jù)到指定的.NET類型對(duì)象 /// <para>如果發(fā)生JsonSerializationException異常,再以集合的方式重試一次,取出集合的第一個(gè)T對(duì)象。</para> /// <para>轉(zhuǎn)換失敗,或發(fā)生其它異常,則返回T對(duì)象的默認(rèn)值</para> /// </summary> /// <param name="json">需要反序列化的JSON字符串</param> /// <typeparam name="T">反序列化對(duì)象的類型</typeparam> /// <returns></returns> public static T FromJson<T>(this string json) where T : class, new() { return FromJson<T>(json, Formatting.None, JsonSettings); } /// <summary> /// 應(yīng)用默認(rèn)的Formatting枚舉值None和默認(rèn)的JsonSerializerSettings設(shè)置,序列化對(duì)象到JSON格式的字符串 /// </summary> /// <param name="obj">任意一個(gè)對(duì)象</param> /// <returns>標(biāo)準(zhǔn)的JSON格式的字符串</returns> public static string ToJson(this object obj) { return ToJson(obj, Formatting.None, JsonSettings); } public static string ToJson<TSource>(this IEnumerable<TSource> source, F
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注