zoukankan      html  css  js  c++  java
  • 利用Newtonsoft.Json实现Json序列化与反序列化

        在项目中用到了Newtonsoft.Json来实现序列化和反序列化,在这里写下实现代码。

        1、创建类用于排除不序列化的属性

    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));
            }
        }

        2、序列化方法

        以下分别是将对象、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

        3、反序列化

        以下是将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
  • 相关阅读:
    【第4题】 什么是https
    【第3题】 两个队列生成一个栈
    【第2题】 链表的逆置
    【第1题】 Pythonn内存管理以及垃圾回收机制
    tmunx error:invalid option: status-utf8 invalid option: utf8
    ubuntu install google-chrome-stable
    使用pyenv安装多个Python版本
    Linux命令行烧录树莓派镜像至SD卡
    freenode configuration sasl authentication in weechat
    尝试IRC & freenode
  • 原文地址:https://www.cnblogs.com/huatao/p/4689156.html
Copyright © 2011-2022 走看看