web-dev-qa-db-fra.com

Vérification de JToken vide/nul dans un objet JObject

J'ai le suivant ...

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

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

JTokenToSql ressemble à ceci ...

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

J'ai aussi essayé ((JObject)obj).Count .. Mais ça ne semble pas fonctionner.

55
Kyle

Pour vérifier si une propriété existe sur une JObject, vous pouvez utiliser la syntaxe entre crochets et voir si le résultat est null ou non. Si la propriété existe, un JToken sera toujours renvoyé (même s'il a la valeur null dans le JSON).

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

Si vous avez une JToken en main et que vous voulez voir si elle est non vide, cela dépend du type de JToken et de la façon dont vous définissez "vide". J'utilise généralement une méthode d'extension comme ceci:

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);
    }
}
112
Brian Rogers

Vous pouvez procéder comme suit pour vérifier si une valeur JToken est nulle

JToken token = jObject["key"];

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

En tant que C # 7, vous pouvez également utiliser ceci:

if (clientsParsed["objects"] is JArray clients) 
{
    foreach (JObject item in clients.Children())
    {
        if (item["thisParameter"] as JToken itemToken) 
        {
            command.Parameters["@MyParameter"].Value = JTokenToSql(itemToken);
        }
    }
}

L'opérateur is vérifie le type et, s'il corrige, la valeur se trouve dans la variable client.

0
Sebastian

Il existe également un type - JTokenType.Undefined.

Ce chèque doit être inclus dans la réponse de @Brian Rogers.

token.Type == JTokenType.Undefined
0
aleha