c# - Newtonsoft Json.NET 不序列化 [过时] 属性
问题描述
有没有办法将 Json.NET 配置为不序列化具有属性的[Obsolete]
属性?
例如
public class Foo
{
public int Id { get; set; }
[Obsolete]
public int Age { get; set; }
}
var foo = new Foo { Id = 123, Age = 23 };
var json = JsonConvert.SerializeObject(foo);
在上面的例子中,json是{"Id":123,"Age":23}
我想{"Id":123}
解决方案
是的,您可以使用自定义ContractResolver
排除标记为过时的属性。
这是解析器所需的代码:
public class ExcludeObsoletePropertiesResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty prop = base.CreateProperty(member, memberSerialization);
if (prop.AttributeProvider.GetAttributes(true).OfType<ObsoleteAttribute>().Any())
{
prop.ShouldSerialize = obj => false;
}
return prop;
}
}
然后像这样使用它:
var settings = new JsonSerializerSettings
{
ContractResolver = new ExcludeObsoletePropertiesResolver()
};
var json = JsonConvert.SerializeObject(foo, settings);
在这里工作演示:https ://dotnetfiddle.net/gIRCD4
推荐阅读
- c++ - 当我的程序不在焦点时,不选择 GetAsyncKeyState。玩游戏时不工作
- python - 在 scipy.sparse 和 numpy 中处理不同的切片行为
- angular - 为什么我的 Angular 路由教程的后续代码显示空白页?
- ios - 如何使用自动布局调整 UILabel 宽度以适合文本?
- c# - 如何使用锁和委托同步方法访问(线程安全)
- r - 如何在R中同时按列名过滤和过滤
- android - ADB 在我的 Android Studio 中的任何设备以及任何模拟器中都没有工作。显示空白没有别的
- c++ - C++ - 指向类类型的指针
- kubernetes - 我将如何使用我的自定义入口默认后端?
- linux - Azure 运行命令返回截断的输出