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()
.