如何在自定义 JsonConverter 中使用默认序列化
How to use default serialization in a custom JsonConverter
我有一个复杂的对象图,我是 serializing/deserializing 和 Json.NET。一些对象派生自抽象 class,因此为了使反序列化正常工作,我需要创建一个自定义 JsonConverter
。它的唯一作用是在反序列化时 select 抽象 class 的适当具体实现,并允许 Json.NET 继续进行。
当我想序列化时,我的问题就来了。我根本不需要做任何定制。我想获得与使用没有自定义 JsonConverter
.
的 JsonConvert.SerializeObject
完全相同的行为
但是,由于我使用自定义 JsonConverter class 来满足我的反序列化需求,我不得不提供 WriteJson
实现。由于 WriteJson 是抽象的,所以我不能只调用 base.WriteJson
,但我基本上想这样做。所以我的问题是,我在那个方法中放了什么来获得普通的默认行为?换句话说:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// What goes here to get default processing?
}
在您的自定义 JsonConverter
, override CanWrite
和 return 中 false:
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
那么你可以从 WriteJson
中抛出异常,因为它不会被调用。
(类似地,要在 de 序列化期间获得默认行为,请覆盖 CanRead
和 return false
。)
请注意,相同的方法可用于 JsonConverter<T>
(introduced in Json.NET 11.0.1) since it is just a subclass of JsonConverter
that introduces type-safe versions of ReadJson()
and WriteJson()
。
我有一个复杂的对象图,我是 serializing/deserializing 和 Json.NET。一些对象派生自抽象 class,因此为了使反序列化正常工作,我需要创建一个自定义 JsonConverter
。它的唯一作用是在反序列化时 select 抽象 class 的适当具体实现,并允许 Json.NET 继续进行。
当我想序列化时,我的问题就来了。我根本不需要做任何定制。我想获得与使用没有自定义 JsonConverter
.
JsonConvert.SerializeObject
完全相同的行为
但是,由于我使用自定义 JsonConverter class 来满足我的反序列化需求,我不得不提供 WriteJson
实现。由于 WriteJson 是抽象的,所以我不能只调用 base.WriteJson
,但我基本上想这样做。所以我的问题是,我在那个方法中放了什么来获得普通的默认行为?换句话说:
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// What goes here to get default processing?
}
在您的自定义 JsonConverter
, override CanWrite
和 return 中 false:
public override bool CanWrite { get { return false; } }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
那么你可以从 WriteJson
中抛出异常,因为它不会被调用。
(类似地,要在 de 序列化期间获得默认行为,请覆盖 CanRead
和 return false
。)
请注意,相同的方法可用于 JsonConverter<T>
(introduced in Json.NET 11.0.1) since it is just a subclass of JsonConverter
that introduces type-safe versions of ReadJson()
and WriteJson()
。