diff --git a/ICD.Common.Utils/Extensions/JsonReaderExtensions.cs b/ICD.Common.Utils/Extensions/JsonReaderExtensions.cs index e50a120..1a5f128 100644 --- a/ICD.Common.Utils/Extensions/JsonReaderExtensions.cs +++ b/ICD.Common.Utils/Extensions/JsonReaderExtensions.cs @@ -146,6 +146,9 @@ namespace ICD.Common.Utils.Extensions if (extends == null) throw new ArgumentNullException("extends"); + if (!extends.TokenType.IsPrimitive()) + throw new FormatException("Expected primitive token type but got " + extends.TokenType); + return extends.Value == null ? null : extends.Value.ToString(); } diff --git a/ICD.Common.Utils/Extensions/JsonTokenExtensions.cs b/ICD.Common.Utils/Extensions/JsonTokenExtensions.cs new file mode 100644 index 0000000..a2ab88f --- /dev/null +++ b/ICD.Common.Utils/Extensions/JsonTokenExtensions.cs @@ -0,0 +1,45 @@ +using System; +using Newtonsoft.Json; + +namespace ICD.Common.Utils.Extensions +{ + public static class JsonTokenExtensions + { + /// + /// Returns true if the JsonToken respresents a single data value + /// rather than a complex type such as an object or an array. + /// + /// + /// + public static bool IsPrimitive(this JsonToken extends) + { + switch (extends) + { + case JsonToken.None: + case JsonToken.StartObject: + case JsonToken.StartArray: + case JsonToken.StartConstructor: + case JsonToken.EndObject: + case JsonToken.EndArray: + case JsonToken.EndConstructor: + case JsonToken.Undefined: + return false; + + case JsonToken.PropertyName: + case JsonToken.Comment: + case JsonToken.Raw: + case JsonToken.Integer: + case JsonToken.Float: + case JsonToken.String: + case JsonToken.Boolean: + case JsonToken.Null: + case JsonToken.Date: + case JsonToken.Bytes: + return true; + + default: + throw new ArgumentOutOfRangeException("extends"); + } + } + } +} \ No newline at end of file diff --git a/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj b/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj index 7939358..1ba061a 100644 --- a/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj +++ b/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj @@ -110,6 +110,7 @@ +