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



当尝试序列化多态类型的对象列表(例如具有RectangleCircleTriangle对象的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字符串。

相关内容

  • 没有找到相关文章

最新更新