c# - Comprobando JToken vacío/nulo en JObject
sql json.net (3)
A partir de C # 7 también podrías usar esto:
if (clientsParsed["objects"] is JArray clients)
{
foreach (JObject item in clients.Children())
{
if (item["thisParameter"] as JToken itemToken)
{
command.Parameters["@MyParameter"].Value = JTokenToSql(itemToken);
}
}
}
El Operador is es el Tipo y si se corrige, el Valor está dentro de la variable del cliente.
Tengo lo siguiente ...
JArray clients = (JArray)clientsParsed["objects"];
foreach (JObject item in clients.Children())
{
// etc.. SQL params stuff...
command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]);
}
JTokenToSql
ve así ...
public static object JTokenToSql(JToken obj)
{
if (obj.Any())
return (object)obj;
else
return (object)DBNull.Value;
}
He intentado ((JObject)obj).Count
también ... Pero parece que no funciona.
Para verificar si una propiedad existe en JObject
, puede usar la sintaxis de corchetes cuadrados y ver si el resultado es nulo o no. Si la propiedad existe, siempre se devolverá un JToken
(incluso si tiene el valor null
en el JSON).
JToken token = jObject["param"];
if (token != null)
{
// the "param" property exists
}
Si tienes un JToken
en la mano y quieres ver si no está vacío, bueno, eso depende del tipo de JToken
y cómo defines "vacío". Usualmente uso un método de extensión como este:
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);
}
}
Puede proceder de la siguiente manera para comprobar si un Valor JToken es nulo
JToken token = jObject["key"];
if(token.Type == JTokenType.Null)
{
// Do your logic
}