如何在自定义 JsonConverter 中使用默认序列化



我有一个复杂的对象图,我正在用 Json.NET 对其进行序列化/反序列化。一些对象派生自抽象类,因此为了使反序列化正常工作,我需要创建自定义JsonConverter。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许 Json.NET 继续其方式。

当我想序列化时,我的问题就来了。我根本不需要做任何自定义操作。我想获得与使用没有自定义JsonConverter JsonConvert.SerializeObject完全相同的行为。

但是,由于我使用自定义 JsonConverter 类来满足反序列化需求,因此我被迫提供WriteJson实现。由于 WriteJson 是抽象的,我不能只称base.WriteJson,但我想从根本上做到这一点。所以我的问题是,我在该方法中放了什么来获得普通简的默认行为?换句话说:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    // What goes here to get default processing?
}

在自定义JsonConverter中,覆盖CanWrite并返回 false:

public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    throw new NotImplementedException();
}

然后你可以从WriteJson抛出一个异常,因为它不会被调用。

(同样,若要在序列化期间获取默认行为,请重写CanRead并返回false

请注意,相同的方法可用于JsonConverter<T>(在 Json.NET 11.0.1 中引入),因为它只是引入 ReadJson()WriteJson() 的类型安全版本的 JsonConverter 子类。

相关内容

  • 没有找到相关文章

最新更新