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

Bri*_*Rak 31 json json.net

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

当我想序列化时,我的问题出现了.我根本不需要做任何自定义.我想获得完全相同的行为,因为JsonConvert.SerializeObject没有自定义JsonConverter.

但是,由于我使用自定义JsonConverter类来满足反序列化需求,因此我不得不提供WriteJson实现.由于WriteJson是抽象的,我不能只是调用base.WriteJson,但我想基本上这样做.所以我的问题是,我该用什么方法来获得普通的Jane,默认行为?换一种说法:

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

dbc*_*dbc 42

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

public override bool CanWrite { get { return false; } }

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以抛出异常WriteJson,因为它不会被调用.

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

  • 太明显:).谢谢! (3认同)