利用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

 

转载于:https://www.cnblogs.com/huatao/p/4689156.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值