serializar objeto convertir clase json json.net

convertir - serializar objeto c# json



Cómo usar la serialización predeterminada en un JsonConverter personalizado (1)

Tengo un gráfico de objetos complejos que estoy serializando / deserializando con Json.NET. Algunos de los objetos se derivan de una clase abstracta, por lo que para que la deserialización funcione correctamente, necesitaba crear un JsonConverter personalizado. Su único rol es seleccionar la implementación concreta apropiada de la clase abstracta en el momento de la deserialización y permitir que Json.NET continúe su camino.

Mi problema viene cuando quiero serializar. No necesito hacer nada personalizado. Quiero obtener exactamente el mismo comportamiento que obtendría usando JsonConvert.SerializeObject sin JsonConverter personalizado.

Sin embargo, dado que estoy usando la clase JsonConverter personalizada para mis necesidades de deserialización, me veo obligado a proporcionar una implementación WriteJson . Como WriteJson es abstracto, no puedo simplemente llamar a base.WriteJson , pero quiero hacer eso esencialmente. Entonces mi pregunta es, ¿qué pongo en ese método para obtener el comportamiento predeterminado de Jane? En otras palabras:

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


En su JsonConverter personalizado, anule CanWrite y devuelva falso:

public override bool CanWrite { get { return false; } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); }

Luego puede lanzar una excepción de WriteJson , ya que no se llamará.

(Del mismo modo, para obtener un comportamiento predeterminado durante la CanRead , anule CanRead y devuelva false ).

Tenga en cuenta que se puede usar el mismo enfoque para JsonConverter<T> (introducido en Json.NET 11.0.1 ) ya que es solo una subclase de JsonConverter que introduce versiones de ReadJson() y WriteJson() con seguridad de ReadJson() .