Example #1
0
        public static string GetLiteralString(IJsonReader r)
        {
            switch (r.GetLiteralKind())
            {
            case LiteralKind.Null: return(null);

            case LiteralKind.String: return(r.GetLiteralString());
            }
            throw new InvalidDataException("expected a string literal");
        }
Example #2
0
 public static string GetLiteralNumber(IJsonReader r)
 {
     switch (r.GetLiteralKind())
     {
     case LiteralKind.SignedInteger:
     case LiteralKind.UnsignedInteger:
     case LiteralKind.FloatingPoint:
         return(r.GetLiteralString());
     }
     throw new InvalidDataException("expected a numeric literal");
 }
Example #3
0
        public static bool GetLiteralBool(IJsonReader r)
        {
            switch (r.GetLiteralKind())
            {
            case LiteralKind.True:
                return(true);

            case LiteralKind.False:
                return(false);

            default:
                throw new InvalidDataException("expected a boolean value");
            }
        }
Example #4
0
        public static char GetLiteralChar(IJsonReader r)
        {
            if (r.GetLiteralKind() != LiteralKind.String)
            {
                throw new InvalidDataException("expected a single character string literal");
            }
            var str = r.GetLiteralString();

            if (str == null || str.Length != 1)
            {
                throw new InvalidDataException("expected a single character string literal");
            }

            return(str[0]);
        }
Example #5
0
 private static PointComplex ParseJson(IJsonReader r)
 {
     if (r.GetLiteralKind() == LiteralKind.String)
     {
         var parts = ((string)r.GetLiteralString()).Split(',');
         if (parts.Length == 2)
         {
             var pt = new PointComplex()
             {
                 X = int.Parse(parts[0], CultureInfo.InvariantCulture),
                 Y = int.Parse(parts[0], CultureInfo.InvariantCulture),
             };
             r.NextToken();
             return pt;
         }
     }
     throw new InvalidDataException("Invalid point");
 }
Example #6
0
 private static PointComplex ParseJson(IJsonReader r)
 {
     if (r.GetLiteralKind() == LiteralKind.String)
     {
         var parts = ((string)r.GetLiteralString()).Split(',');
         if (parts.Length == 2)
         {
             var pt = new PointComplex()
             {
                 X = int.Parse(parts[0], CultureInfo.InvariantCulture),
                 Y = int.Parse(parts[1], CultureInfo.InvariantCulture),
             };
             r.NextToken();
             return(pt);
         }
     }
     throw new InvalidDataException("Invalid point");
 }
Example #7
0
        /// <summary>
        /// Read a literal number
        /// </summary>
        /// <param name="reader">The reader to read from</param>
        /// <param name="type">The number type to return</param>
        /// <returns>A number of specified type, or throws an InvalidDataException</returns>
        public static object ReadLiteralNumber(this IJsonReader reader, Type type)
        {
            switch (reader.GetLiteralKind())
            {
            case LiteralKind.String:
                var value = Convert.ChangeType(reader.GetLiteralString(), type, CultureInfo.InvariantCulture);
                reader.NextToken();
                return(value);

            case LiteralKind.SignedInteger:
            case LiteralKind.UnsignedInteger:
            {
                var str = reader.GetLiteralString();
                if (str.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase))
                {
                    var    tempValue = Convert.ToUInt64(str.Substring(2), 16);
                    object val       = Convert.ChangeType(tempValue, type, CultureInfo.InvariantCulture);
                    reader.NextToken();
                    return(val);
                }
                else
                {
                    object val = Convert.ChangeType(str, type, CultureInfo.InvariantCulture);
                    reader.NextToken();
                    return(val);
                }
            }

            case LiteralKind.FloatingPoint:
            {
                object val = Convert.ChangeType(reader.GetLiteralString(), type, CultureInfo.InvariantCulture);
                reader.NextToken();
                return(val);
            }
            }
            throw new InvalidDataException("expected a numeric literal");
        }