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.
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);
}
}
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
}
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.
Il existe également un type - JTokenType.Undefined.
Ce chèque doit être inclus dans la réponse de @Brian Rogers.
token.Type == JTokenType.Undefined