Loading... ## 期望效果 转JSON时,忽略指定属性 ## 代码 ```csharp 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)); } } ``` ```csharp 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`方法: ```csharp var obj = JObject.FromObject(item); foreach (var prop in ignoreProps) { obj.Remove(prop); } return JsonConvert.SerializeObject(obj); ``` 同样的数据量,只需要3秒钟。 最后修改:2023 年 01 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏