期望效果
转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()
,每次都去创建了一个对象产生了很多开销,抽离出来避免重复创建新对象会解决该问题。
也可以使用JObject
的Remove
方法:
var obj = JObject.FromObject(item);
foreach (var prop in ignoreProps)
{
obj.Remove(prop);
}
return JsonConvert.SerializeObject(obj);
同样的数据量,只需要3秒钟。