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.

Respuestas a la pregunta(4)

Su respuesta a la pregunta