【发布时间】:2018-09-27 17:18:19
【问题描述】:
我想编写一个 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。有什么想法吗?
【问题讨论】:
-
您可以通过将
NoConverter中的linked answer 应用于不应使用全局转换器的属性来做到这一点,即public class ClassA { [JsonConverter(typeof(NoConverter))] public MyType PropMyType {get;set;} } -
是否可以通过在关卡类中而不是在关卡属性中定义 NoConverter 来做到这一点?
-
不是开箱即用的。这将需要一个自定义合同解析器。这是回答问题的必要条件吗?链接的答案似乎很简单,无论哪种方式,您都需要向您的类型添加特定于序列化的属性。但如果是要求,问题可以重新打开。
-
是的,这是一个要求。我在
DefaultContractResolver中定义:property.Converter = new NoConverter();如果该类具有属性 IgnoreSomeConverter。访问课程:Type myType = Type.GetType(member.ReflectedType.AssemblyQualifiedName); -
是的,这是正确的方法。你想让我重新打开这个问题,以便你自己回答吗?
标签: c# json asp.net-web-api json.net jsonconverter