Uso de un discriminador de tipo personalizado para indicar a JSON.net qué tipo de jerarquía de clases deserializar
Supongamos que tengo la siguiente jerarquía de clases:
public abstract class Organization
{
/* properties related to all organizations */
}
public sealed class Company : Organization
{
/* properties related to companies */
}
public sealed class NonProfitOrganization : Organization
{
/* properties related to non profit organizations */
}
Es posible tenerjson.net use la propiedad (diga "tipo" o "discriminador") para determinar qué tipo de objeto cuando deserializa la organización? Por ejemplo, lo siguiente debería deserializar una instancia de la Compañía.
{
"type": "company"
/* other properties related to companies */
}
Y lo siguiente debe deserializar una instancia de NonProfitOrganization.
{
"type": "non-profit"
/* other properties related to non profit */
}
Cuando llamo a lo siguiente:
Organization organization = JsonConvert.DeserializeObject<Organization>(payload);
donde la carga útil son los fragmentos JSON anteriores. Eché un vistazo a la configuración de la "TypeNameHandling"en propiedades o clases, pero serializa todo el tipo .NET, que no es" portátil "entre el cliente y el servidor cuando las clases se definen en diferentes espacios de nombres y ensamblajes.
Prefiero definir que el tipo es una manera neutral que los clientes escritos en cualquier idioma pueden usar para determinar el tipo real del tipo de objeto que se serializa.