2014-06-05 4 views
37

Ho il seguente ...Controllo di vuoto/null JToken in un jobject

JArray clients = (JArray)clientsParsed["objects"]; 

foreach (JObject item in clients.Children()) 
{ 
    // etc.. SQL params stuff... 
    command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]); 
} 

JTokenToSql assomiglia a questo ...

public static object JTokenToSql(JToken obj) 
{ 
    if (obj.Any()) 
     return (object)obj; 
    else 
     return (object)DBNull.Value; 
} 

ho provato ((JObject)obj).Count anche .. Ma doesn' Sembra che funzioni.

risposta

79

Per verificare se esiste una proprietà su JObject, è possibile utilizzare la sintassi della parentesi quadre e verificare se il risultato è nullo o meno. Se la proprietà esiste, verrà restituito sempre un JToken (anche se ha il valore null nel JSON).

JToken token = jObject["param"]; 
if (token != null) 
{ 
    // the "param" property exists 
} 

Se hai una JToken in mano e si vuole vedere se si tratta di non-vuoto, beh, questo dipende da che tipo di JToken è e come si definisce "vuoto". Io di solito uso un metodo di estensione in questo modo:

public static class JsonExtensions 
{ 
    public static bool IsNullOrEmpty(this JToken token) 
    { 
     return (token == null) || 
       (token.Type == JTokenType.Array && !token.HasValues) || 
       (token.Type == JTokenType.Object && !token.HasValues) || 
       (token.Type == JTokenType.String && token.ToString() == String.Empty) || 
       (token.Type == JTokenType.Null); 
    } 
} 
+1

ce l'avrei fatta metodo di estensione come: IsNullOrEmpty pubblico bool statico (questo token JToken) {...} da utilizzare come JToken token = jObject ["param"]; bool empty = token.IsNullOrEmpty() –

+0

Impossibile 'ToSrting' the' JToken' e selezionare 'IsNullOrWhiteSpace'? (Dopo aver controllato il 'JToken' non è nullo ovviamente) – Coops

+0

@CodeBlend Che non funzionerà per un oggetto o un array - le versioni serializzate di quelle che sono vuote sono rispettivamente' {} 'e' [] '. –

7

È possibile procedere nel seguente modo per verificare se un valore JToken è nullo

JToken token = jObject["key"]; 

if(token.Type == JTokenType.Null) 
{ 
    // Do your logic 
}