I have the following…
JArray clients = (JArray)clientsParsed["objects"]; foreach (JObject item in clients.Children()) { // etc.. SQL params stuff... command.Parameters["@MyParameter"].Value = JTokenToSql(item["thisParameter"]); }
JTokenToSql
looks like this…
public static object JTokenToSql(JToken obj) { if (obj.Any()) return (object)obj; else return (object)DBNull.Value; }
I have tried ((JObject)obj).Count
also.. But doesn’t seem to be working.
Advertisement
Answer
To check whether a property exists on a JObject
, you can use the square bracket syntax and see whether the result is null or not. If the property exists, a JToken
will be always be returned (even if it has the value null
in the JSON).
JToken token = jObject["param"]; if (token != null) { // the "param" property exists }
If you have a JToken
in hand and you want to see if it is non-empty, well, that depends on what type of JToken
it is and how you define “empty”. I usually use an extension method like this:
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); } }