我有一个复杂的对象图,正在使用Json.NET进行序列化/反序列化。有些对象是从抽象类派生的,因此为了使反序列化正常工作,我需要创建一个custom JsonConverter。它的唯一作用是在反序列化时选择抽象类的适当具体实现,并允许Json.NET继续进行。
JsonConverter
我要序列化时出现问题。我根本不需要做任何自定义。我希望获得JsonConvert.SerializeObject与没有custom时将使用的行为完全相同的行为JsonConverter。
JsonConvert.SerializeObject
但是,由于我将自定义JsonConverter类用于反序列化需求,因此我不得不提供WriteJson实现。由于WriteJson是抽象的,因此我不能只调用base.WriteJson,但我实际上想这样做。因此,我的问题是,我应采用哪种方法来获得简·简的默认行为?换一种说法:
WriteJson
base.WriteJson
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { // What goes here to get default processing? }
在您的custom中JsonConverter,覆盖CanWrite并返回false:
CanWrite
public override bool CanWrite { get { return false; } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); }
然后,您可以从抛出一个异常WriteJson,因为它不会被调用。
(同样,要获得在默认的行为 去 系列化,覆盖CanRead和回报false。)
CanRead
false
请注意,可以使用相同的方法JsonConverter<T>(在Json.NET 11.0.1中引入),因为它只是其中的子类JsonConverter,引入了ReadJson()和的类型安全版本WriteJson()。
JsonConverter<T>
ReadJson()
WriteJson()