期望效果

转JSON时,忽略指定属性

代码

 public class ExcludePropertiesContractResolver : DefaultContractResolver
    {
        private readonly IEnumerable<string> _excludeProps;

        public ExcludePropertiesContractResolver(IEnumerable<string> excludedProperties)
        {
            _excludeProps = excludedProperties;
        }

        protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
        {
            return base.CreateProperties(type, memberSerialization).ToList().FindAll(p => !_excludeProps.Contains(p.PropertyName));
        }
    }
var json = JsonConvert.SerializeObject(item, Formatting.Indented, new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new ExcludePropertiesContractResolver(ignoreProps)
});

解法2 JObject

重写分解器在数据量大的时候速度很慢,八千条左右的数据需要两分多钟。

2023年1月16日更新:
导致的原因是因为new JsonSerializerSettings(),每次都去创建了一个对象产生了很多开销,抽离出来避免重复创建新对象会解决该问题。

也可以使用JObjectRemove方法:

var obj = JObject.FromObject(item);
foreach (var prop in ignoreProps)
{
    obj.Remove(prop);
}
return JsonConvert.SerializeObject(obj);

同样的数据量,只需要3秒钟。

最后修改:2023 年 01 月 16 日
如果觉得我的文章对你有用,请随意赞赏