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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM