using System; using System.Collections.Generic; using System.Reflection; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; namespace Abp.Auditing { /// /// Decides which properties of auditing class to be serialized /// public class AuditingContractResolver : CamelCasePropertyNamesContractResolver { private readonly List _ignoredTypes; public AuditingContractResolver(List ignoredTypes) { _ignoredTypes = ignoredTypes; } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { JsonProperty property = base.CreateProperty(member, memberSerialization); if (member.IsDefined(typeof(DisableAuditingAttribute)) || member.IsDefined(typeof(JsonIgnoreAttribute))) { property.ShouldSerialize = instance => false; } foreach (var ignoredType in _ignoredTypes) { if (ignoredType.GetTypeInfo().IsAssignableFrom(property.PropertyType)) { property.ShouldSerialize = instance => false; break; } } return property; } } }