当尝试序列化多态类型的对象列表(例如具有Rectangle
、Circle
和Triangle
对象的List<Shape>
)时,我需要防止序列化特定类型的对象(例如Circle
)。实现这一目标的最佳方式是什么?JsonIgnore
属性似乎适用于对象属性,而不是整个类型。
没有内置的方法可以忽略某个类型的对象,这些对象是多态类型对象列表的一部分,不被序列化。您可以编写一个自定义的JsonConverter
并用它装饰Circle
类。示例:
public class CircleJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
return;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return true;
}
}
以及Circle
类的示例:
[JsonConverter(typeof(CircleJsonConverter))]
public class Circle : Shape
{
public uint R { get; set; }
}
您可以实现ReadJson
方法,以便能够将json字符串反序列化为Circle
类的实例。该解决方案的缺点是,您将无法使用json.NET将Circle
类的任何实例序列化为json字符串。