2011-08-27 22 views
89

Si mi respuesta tiene un "error" clave, necesito procesar el error y mostrar un cuadro de advertencia.json.net tiene el método clave?

¿Existe el método "haskey" en json.net? Al igual que :

var x= JObject.Parse(string_my); 
if(x.HasKey["error_msg"]) 
    MessageBox.Show("Error!") 
+0

Consulte mi respuesta [aquí] (https://stackoverflow.com/a/47204235/1037314). – Ben

+0

Respondí una pregunta con un problema similar aquí: https://stackoverflow.com/a/47204235/1037314 – Ben

+0

Hay dos variantes de esta pregunta: Una variante es donde el diccionario JSON es plano (sin elementos secundarios) y otro, donde la clave está en algún lugar de la jerarquía de los niños. En el momento de escribir esto, ns.json todavía no tiene un método de conveniencia que le daría fácil acceso para probar una clave. – ljgww

Respuesta

156

Simplemente use x["error_msg"]. Si la propiedad no existe, devuelve null.

+18

¿Qué sucede si el valor de la propiedad es 'nulo'? –

+40

@AndreasFurster Luego devolverá un 'JValue' cuyo' Value' es 'null', no solo' null'. – svick

+0

Si la propiedad puede ser 'nula' podría usar' x ["error_msg"] Object' para verificar si la propiedad está definida en el objeto JSON – stonito

70

JObject implementa IDictionary<string, JToken>, por lo que puede utilizar:

IDictionary<string, JToken> dictionary = x; 
if (dictionary.ContainsKey("error_msg")) 

... o usted podría utilizar TryGetValue. Implementa ambos métodos utilizando la implementación de interfaz explícita, por lo que no puede usarlos sin antes convertir a IDictionary<string, JToken>.

+0

Disminuyo esto será lentamente, luego la respuesta aceptada, pero gracias. – SevenDays

+2

@wsevendays, ¿te importa la velocidad aquí o solo estás microoptimizando (y basándote en las suposiciones)? Debes usar lo que encuentres más legible. – svick

+0

La velocidad del procesador de 1 GHz de mi teléfono WP7 no es buena y me tiene que importar la velocidad. – SevenDays