在项目中用到了Newtonsoft.Json来实现序列化和反序列化,在这里写下实现代码。
public class ExcludePRopertiesContractResolver : DefaultContractResolver { IEnumerable<string> lstExclude; public ExcludePropertiesContractResolver(IEnumerable<string> excludedProperties) { lstExclude = excludedProperties; } protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { return base.CreateProperties(type, memberSerialization).ToList().FindAll(p => !lstExclude.Contains(p.PropertyName)); } }
以下分别是将对象、DataTable、集合序列化为Json字符串的方法:
/// <summary> /// T对象转换成json字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string GetJsonString<T>(T obj, params string[] ignoreFields) { IsoDateTimeConverter iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss"; iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal; string jsonStr = string.Empty; JsonSerializerSettings js = new JsonSerializerSettings(); if (ignoreFields != null && ignoreFields.Length > 0) { List<string> ignoreList = ignoreFields.ToList(); js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList); } js.Converters.Add(iso); jsonStr = JsonConvert.SerializeObject(obj, Formatting.Indented, js); return jsonStr; } /// <summary> /// DataTable对象转换成json字符串 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetJsonString(DataTable dt, params string[] ignoreFields) { IsoDateTimeConverter iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss"; iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal; string jsonStr = string.Empty; JsonSerializerSettings js = new JsonSerializerSettings(); if (ignoreFields != null && ignoreFields.Length > 0) { List<string> ignoreList = ignoreFields.ToList(); js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList); } js.Converters.Add(new DataTableConverter()); js.Converters.Add(iso); jsonStr = JsonConvert.SerializeObject(dt, Formatting.Indented,js); return jsonStr; } /// <summary> /// List对象转换成json字符串 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string GetJsonString<T>(List<T> list, params string[] ignoreFields) { IsoDateTimeConverter iso = new IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-ddTHH:mm:ss"; iso.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal; string jsonStr = string.Empty; JsonSerializerSettings js = new JsonSerializerSettings(); if (ignoreFields != null && ignoreFields.Length > 0) { List<string> ignoreList = ignoreFields.ToList(); js.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; js.ContractResolver = new ExcludePropertiesContractResolver(ignoreList); } js.Converters.Add(iso); jsonStr = JsonConvert.SerializeObject(list, Formatting.Indented, js); return jsonStr; }View Code
以下是将Json字符串反序列化为对象、集合的方法。
/// <summary> /// json字符串转换成T对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonStr"></param> /// <returns></returns> public static T GetObjectByJsonString<T>(string jsonStr) { T obj = JsonConvert.DeserializeObject<T>(jsonStr); return obj; } /// <summary> /// json字符串转换成List对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="jsonStr"></param> /// <returns></returns> public static List<T> GetListByJsonString<T>(string jsonStr) { List<T> list = JsonConvert.DeserializeObject<List<T>>(jsonStr); return list; }View Code
新闻热点
疑难解答