c# - C# JsonConverter 可以根据类转换属性
问题描述
我想编写一个 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。有什么想法吗?
解决方案
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 参数,您可以从中进行属性等。
推荐阅读
- javascript - 重置样式为的选择菜单
- arrays - 在 Julia 中访问复合类型内的数组
- electron - 删除应用程序卸载时的 localStorage 数据
- rust - 用藻箱定义 AdditiveGroup
- javascript - 将 Uint8 数组传递给 PDF.js 不起作用
- clojure - 如何通过clojure编写一个ansible yaml文件?
- windows - 在 Windows 10 上安装最新的 Metasploit
- android - 如何在 Android 上的 WebRTC 中获取远程音频流
- matlab - 如何导入 MVGC Multivariate Granger Causality Matlab® Toolbox 并使用它?
- google-api - Files.get 方法不返回完整的文件响应