有没有一种方法可以将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);
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
var settings = new JsonSerializerSettings
{
ContractResolver = new ExcludeObsoletePropertiesResolver()
};
var json = JsonConvert.SerializeObject(foo, settings);
Run Code Online (Sandbox Code Playgroud)
这里的工作演示:https : //dotnetfiddle.net/gIRCD4