Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段

Posted LoveCoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);



以上是关于Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段的主要内容,如果未能解决你的问题,请参考以下文章

解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

Newtonsoft.Json 序列化和反序列化 以及时间格式 2

Newtonsoft.Json使用

C# Newtonsoft.Json JObject移除属性,在序列化时忽略

Newtonsoft.Json 时间格式化

Newtonsoft.Json(Json.Net)学习笔记