wake-up-neo.com

Suche nach leerem/null-JToken in einem JObject

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.

55
Kyle

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

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
}
23
Sam Ngugi

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.

0
Sebastian

Es gibt auch einen Typ - JTokenType.Undefined.

Diese Prüfung muss in der Antwort von Brian Rogers enthalten sein.

token.Type == JTokenType.Undefined
0
aleha