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"); }
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"); }
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"); } }
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]); }
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"); }
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"); }
/// <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"); }