zoukankan      html  css  js  c++  java
  • Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段

    using Newtonsoft.Json;
    using Newtonsoft.Json.Serialization;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    /// Summary description for LimitPropsContractResolver
    /// </summary>
    public class LimitPropsContractResolver : DefaultContractResolver
    {
        string[] props = null;
    
        bool retain;
    
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="props">传入的属性数组</param>
        /// <param name="retain">true:表示props是需要保留的字段  false:表示props是要排除的字段</param>
        public LimitPropsContractResolver(string[] props, bool retain = true)
        {
            //指定要序列化属性的清单
            this.props = props;
    
            this.retain = retain;
        }
    
        protected override IList<JsonProperty> CreateProperties(Type type,
    
        MemberSerialization memberSerialization)
        {
            IList<JsonProperty> list =
            base.CreateProperties(type, memberSerialization);
            //只保留清单有列出的属性
            return list.Where(p =>
            {
                if (retain)
                {
                    return props.Contains(p.PropertyName);
                }
                else
                {
                    return !props.Contains(p.PropertyName);
                }
            }).ToList();
        }
    }
    

      调用代码:

    var jSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
    string[] props = { "operationRemark", "managerCode", "checkRemark" }; //排除掉,不能让前端看到的字段。为true的话就是只保留这些字段
    jSetting.ContractResolver = new LimitPropsContractResolver(props, false);

    jsonStr = JsonConvert.SerializeObject(slboe, jSetting);

  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业附加
    第三次结构部分作业
    第二次作业
    最后一周作业
    第14,15周作业
    第七周作业
    第六周作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/Jerseyblog/p/10078278.html
Copyright © 2011-2022 走看看