Json.NET:如何防止类型被序列化

时间:2014-09-04 09:58:14

标签: json.net

在尝试序列化多态类型的对象列表时(比如List<Shape>包含RectangleCircleTriangle个对象),我需要阻止对象某些类型被序列化(比如Circle)。 实现这一目标的最佳方法是什么? JsonIgnore属性似乎适用于对象属性而不是整个类型。

1 个答案:

答案 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字符串。