Newtonsoft.Json.JsonConvert.SerializeObject
在使用[JsonIgnore]标记时,有些场景需要干预序列化操作,让此标记失效。
默认情况
有标记的属性,在序列化时都会被忽略,主要用于在对外的接口交互的时候
自定义
Redis存储的时候保留所有字段,系统内部传输的时候保留所有字段 (如果不自定义,那么这些环节可能会缺少字段,从而影响业务使用,比如从Redis中重新读取出来)
代码
/// <summary>
/// 自定义序列化对象,不启用Json忽略标记
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private string customerSerialize(object obj)
{
return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings()
{
ContractResolver = new customizeContractResolver()
});
}
/// <summary>
/// 自定义属性构造器
/// 1、可以通过构造方法,传入bool动态控制,主要用于外面有统一封装的时候
/// 2、可以通过构造方法,传入需要显示的属性名称,然后基于list做linq过滤
/// </summary>
private class customizeContractResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var list = base.CreateProperties(type, memberSerialization);
if (list != null)
{
foreach (var item in list)
{
if (item.Ignored)
{
//不忽略
item.Ignored = false;
}
}
}
return list;
}
}