在尝试序列化多态类型的对象列表时(比如List<Shape>
包含Rectangle
,Circle
和Triangle
个对象),我需要阻止对象某些类型被序列化(比如Circle
)。
实现这一目标的最佳方法是什么? JsonIgnore
属性似乎适用于对象属性而不是整个类型。
答案 0 :(得分:1)
没有内置的方法可以忽略特定类型的对象,这些对象是多态类型对象列表的一部分,不会被序列化。您可以做的是编写自定义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字符串。