我有一些对象,想要将它们序列化为 JSON。然而,其中一些对象具有通过属性被视为“SensitiveData”的属性。
[SensitiveDataAttribute]
public string SomeSensitiveProperty {get; set;}
目前,我正在覆盖序列化器上的“CreateProperty”方法,以便我可以根据属性是否具有“SensitiveData”属性来改变该属性是否应序列化:
目前,我正在重写序列化器上的“CreateProperty”方法,以便我可以根据属性是否具有“SensitiveData”属性来决定是否对该属性进行序列化。
public class SensitiveDataResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = instance =>
{
if (member is PropertyInfo)
{
var prop = (PropertyInfo) member;
var isSensitiveData = Attribute.IsDefined(prop, typeof (SensitiveDataAttribute));
return !isSensitiveData;
}
return false;
};
return property;
}
}
}
当我进行序列化时,我会使用该解析器作为序列化器的设置:
var settings = new JsonSerializerSettings() { ContractResolver = new SensitiveDataResolver() };
var requestString = JsonConvert.SerializeObject(someObject, settings);
我的问题是,我不想将属性从序列化中排除。我想要序列化它们,但默认值为“SensitiveData”。
是否有一种方法可以使用属性实现这个目的?