Cómo deserializar JSON con el patrón de composición – C#, Json
Como tuve que buscar durante mucho tiempo una respuesta que funcionara tal como está, proporcionaré un ejemplo aquí, cuando se serializa y deserializa un objeto con una estructura de patrón compuesto.
Mi problema era deserializar este tipo de estructura de clase (https://en.wikipedia.org/wiki/Composite_pattern):
abstract class BaseClass
{
public int Id { get; set; }
}
class Leaf : BaseClass
{
public string Foo { get; set; }
}
class Composite : BaseClass
{
public List<baseclass> ClassList = new List<baseclass>();
}
La serialización funcionó usando:
var composite = new Composite();
JsonConvert.SerializeObject(composite, Formatting.Indented);
La deserialización no funcionó de forma automática.
davy.ai
Después de buscar, encontré que para deserializar correctamente este tipo de estructura de clase, es necesario usar el atributo
JsonConverter
con un conversor personalizado que maneje los tipos polimórficos. Aquí tienes un ejemplo del conversor personalizado:Para utilizar este conversor personalizado, necesitas aplicar el atributo
JsonConverter
a la clase abstractaBaseClass
, de la siguiente manera:Ahora, cuando deserialices un objeto JSON con esta estructura de clase, debería manejar correctamente los tipos polimórficos y crear los objetos correctos. Aquí tienes un ejemplo de deserialización:
Esto debería crear correctamente un objeto
Composite
con dos elementos enClassList
, uno de tipoLeaf
y otro de tipoBaseClass
.