我想编写一个JsonConverter,它可以转换确定的属性类型,但仅取决于它们定义的类。
我正在通过Web API在全球范围内注册JsonConverter:
var config = GlobalConfiguration.Configuration;
var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.Converters.Add(new SomeConverter());
转换器可以转换例如MyType类型的对象。
public override bool CanConvert(Type objectType)
{
return typeof(MyType).IsAssignableFrom(objectType);
}
但是现在我想控制是否应该使用转换器。
我认为是这样的:
[IgnoreSomeConverter]
public class ClassA
{
public MyType PropMyType {get;set;}
}
public class ClassB
{
public MyType PropMyType {get;set;}
}
因此,我希望SomeConverter仅在未使用CustomAttribute IgnoreSomeConverter装饰的类中定义属性时,才对属性MyType进行序列化和反序列化。在示例中,我想将转换器用于ClassB,而不要用于ClassA。有什么想法吗?
答案 0 :(得分:0)
Newtonsoft.JSON 软件包包含 DefaultContractResolver 类,请在您的计算机上注册 序列化程序设置,从中创建一个派生类,您可以将其用于类或类属性。
public class ShouldSerializeContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.ShouldSerialize = i => false;
property.Ignored = true;
return property;
}
}
并注册。
var serializer = new JsonSerializerSettings { ContractResolver = new ShouldSerializeContractResolver() };
函数具有MemberInfo参数,您可以从中进行属性定义等。