Sé que puedo usar JsonConvert.DeserializeObject<T>(string)
, sin embargo, tengo que echar un vistazo en _type
del objeto (que puede no ser el primer parámetro) para determinar la clase específica para convertir a . Básicamente, lo que quiero hacer es algo como:Cómo lanzar JObject en JSON.Net a T
//Generic JSON processor for an API Client.
function MyBaseType ProcessJson(string jsonText)
{
var obj = JObject.Parse(jsonText);
switch (obj.Property("_type").Value.ToString()) {
case "sometype":
return obj.RootValue<MyConcreteType>();
//NOTE: this doesn't work...
// return obj.Root.Value<MyConcreteType>();
...
}
}
...
// my usage...
var obj = ProcessJson(jsonText);
var instance = obj as MyConcreteType;
if (instance == null) throw new MyBaseError(obj);
Debo señalar que principalmente estoy queriendo evitar que sea interpretado el JSON dos veces si puedo. – Tracker1
¿Qué kinf de JSON estás usando que tiene información de tipo? JSON es una notación de pares propiedad-valor (donde el valor puede ser una matriz u otro tipo incluyendo sus propios pares de propiedad-valor). Pero nunca he visto un JSON con información tipo. ¡Cuando "stringify" y objeta JSON, se pierde toda la información de tipo! – JotaBe
@JotaBe es parte de una API de descanso expuesta para la que estoy creando un cliente, para usar en un proyecto en el que estoy trabajando. Normalmente, es una buena idea exponer una API mediante JSON para que todas las respuestas estén envueltas en un objeto, por lo que la respuesta más externa siempre es un objeto (incluso para respuestas de error) y para tener algún tipo de información de tipo con ese objeto. .Es realmente útil en términos de errores de procesamiento frente a las respuestas esperadas en el nivel del cliente ... – Tracker1