一尘不染

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

json

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

我要序列化时出现问题。我根本不需要做任何自定义。我希望获得JsonConvert.SerializeObject与没有custom时将使用的行为完全相同的行为JsonConverter

但是,由于我将自定义JsonConverter类用于反序列化需求,因此我不得不提供WriteJson实现。由于WriteJson是抽象的,因此我不能只调用base.WriteJson,但我实际上想这样做。因此,我的问题是,我应采用哪种方法来获得简·简的默认行为?换一种说法:

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

阅读 421

收藏
2020-07-27

共1个答案

一尘不染

在您的custom中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中
引入),因为它只是其中的子类JsonConverter,引入了ReadJson()和的类型安全版本WriteJson()

2020-07-27