我有一个复杂的对象图,我正在使用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?
}
答案 0 :(得分:37)
在自定义JsonConverter
中,覆盖CanWrite
并返回false:
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
然后你可以从WriteJson
中抛出异常,因为它不会被调用。
(同样,要在 de 序列化期间获取默认行为,请覆盖CanRead
并返回false
。)
请注意,相同的方法可用于JsonConverter<T>
(在Json.NET 11.0.1中引入),因为它只是JsonConverter
的一个子类,它引入了ReadJson()
的类型安全版本和WriteJson()
。