using Newtonsoft.Json.Serialization;
static void Main(string[] args)
var model = new MyClass()
DefIgnore = "default ignore attribute"
var res1 = JsonConvert.SerializeObject(model);
var res2 = JsonConvert.SerializeObject(model, JsonIgnorePersonalDataSerializerSettings.Instance);
Console.WriteLine("Default behaviour: {0}", res1);
Console.WriteLine("Hide personal data: {0}", res2);
public int Id { get; set; }
public string Age { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string DefIgnore { get; set; }
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
public sealed class PersonalDataAttribute: Attribute
public sealed class ShouldSerializeContractResolver: DefaultContractResolver
public new static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();
private static Predicate<object> _false = instance => false;
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
JsonProperty property = base.CreateProperty(member, memberSerialization);
if (member.GetCustomAttribute<PersonalDataAttribute>() != null)
property.ShouldSerialize = _false;
public class JsonIgnorePersonalDataSerializerSettings: JsonSerializerSettings
public static readonly JsonIgnorePersonalDataSerializerSettings Instance = new JsonIgnorePersonalDataSerializerSettings();
private JsonIgnorePersonalDataSerializerSettings()
ContractResolver = ShouldSerializeContractResolver.Instance;
NullValueHandling = NullValueHandling.Ignore;
Formatting = Formatting.None;