Ich habe folgendes ...
JArray clients = (JArray)clientsParsed["objects"];
foreach (JObject item in clients.Children())
{
// etc.. SQL params stuff...
command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]);
}
JTokenToSql
sieht so aus ...
public static object JTokenToSql(JToken obj)
{
if (obj.Any())
return (object)obj;
else
return (object)DBNull.Value;
}
Ich habe ((JObject)obj).Count
auch ausprobiert .. Scheint aber nicht zu funktionieren.
Um zu überprüfen, ob eine Eigenschaft in einer JObject
vorhanden ist, können Sie die eckige Klammer-Syntax verwenden und prüfen, ob das Ergebnis null ist oder nicht. Wenn die Eigenschaft vorhanden ist, wird immer ein JToken
zurückgegeben (auch wenn sie in der JSON den Wert null
hat).
JToken token = jObject["param"];
if (token != null)
{
// the "param" property exists
}
Wenn Sie eine JToken
in der Hand haben und sehen möchten, ob sie nicht leer ist, hängt das davon ab, um welche Art von JToken
es sich handelt und wie Sie "leer" definieren. Ich benutze normalerweise eine Erweiterungsmethode wie diese:
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);
}
}
Sie können wie folgt vorgehen, um zu prüfen, ob ein JToken-Wert null ist
JToken token = jObject["key"];
if(token.Type == JTokenType.Null)
{
// Do your logic
}
Ab C # 7 können Sie auch Folgendes verwenden:
if (clientsParsed["objects"] is JArray clients)
{
foreach (JObject item in clients.Children())
{
if (item["thisParameter"] as JToken itemToken)
{
command.Parameters["@MyParameter"].Value = JTokenToSql(itemToken);
}
}
}
Der Operator is prüft den Typ und wenn er korrigiert wird, befindet sich der Wert in der Variablen clients.
Es gibt auch einen Typ - JTokenType.Undefined.
Diese Prüfung muss in der Antwort von Brian Rogers enthalten sein.
token.Type == JTokenType.Undefined