/// <summary> /// Writes a text representation of the specified <paramref name="primitiveValue"/> into a text writer. /// </summary> /// <param name="primitiveValue">The JSON value to write.</param> private void WritePrimitiveValue(JsonPrimitiveValue primitiveValue) { var textAnnotation = primitiveValue.GetAnnotation <JsonPrimitiveValueTextAnnotation>() ?? JsonPrimitiveValueTextAnnotation.GetDefault(primitiveValue, this.writingJsonLight, isIeee754Compatible); this.writer.Write(textAnnotation.Text); }
/// <summary> /// Parses Json value or property. /// </summary> /// <returns>Parsed value.</returns> public JsonValue ParseValueOrProperty() { JsonValue value = this.ParseValue(); JsonPrimitiveValue stringValue = value as JsonPrimitiveValue; if (stringValue != null && stringValue.Value != null && stringValue.Value is string) { if (this.tokenizer.HasMoreTokens()) { JsonPrimitiveValueTextAnnotation textAnnotation = stringValue.GetAnnotation <JsonPrimitiveValueTextAnnotation>(); JsonPropertyNameTextAnnotation propertyNameTextAnnotation = null; if (textAnnotation != null) { propertyNameTextAnnotation = new JsonPropertyNameTextAnnotation() { Text = textAnnotation.Text }; } return(this.ParsePropertyWithName((string)stringValue.Value, propertyNameTextAnnotation)); } else { return(stringValue); } } else { return(value); } }
/// <summary> /// Parses the token of type bool /// </summary> /// <returns>Parsed Bool Value</returns> private JsonPrimitiveValue ParseBool() { var result = this.tokenizer.Value; var textAnnotation = new JsonPrimitiveValueTextAnnotation() { Text = this.tokenizer.TokenText }; this.tokenizer.GetNextToken(); var primitiveValue = new JsonPrimitiveValue(result); primitiveValue.SetAnnotation(textAnnotation); return(primitiveValue); }
static Option <IJsonValue> TryParsePrimitive(string name, JToken token) { var result = none <IJsonValue>(); switch (token.Type) { case JTokenType.Boolean: case JTokenType.Date: case JTokenType.Float: case JTokenType.Guid: case JTokenType.Integer: case JTokenType.Raw: case JTokenType.TimeSpan: case JTokenType.Uri: case JTokenType.String: result = new JsonPrimitiveValue(name, token.Value <string>()); break; } return(result); }
/// <summary> /// Returns the default text annotation for a specified primitive value. /// </summary> /// <param name="primitiveValue">The primitive value.</param> /// <param name="writingJsonLight">true if we're writing JSON light, false otherwise.</param> /// <param name="isIeee754Compatible">if it is IEEE754Compatible</param> /// <returns>The default text representation of the primitive value.</returns> public static JsonPrimitiveValueTextAnnotation GetDefault(JsonPrimitiveValue primitiveValue, bool writingJsonLight, bool isIeee754Compatible) { string result = null; if (primitiveValue.Value == null) { result = "null"; } else { switch (Type.GetTypeCode(primitiveValue.Value.GetType())) { case TypeCode.Boolean: result = XmlConvert.ToString((bool)primitiveValue.Value); break; case TypeCode.Int32: result = ((int)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.UInt32: result = ((uint)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.Single: float floatValue = (float)primitiveValue.Value; if (float.IsInfinity(floatValue) || float.IsNaN(floatValue)) { result = "\"" + floatValue.ToString(null, CultureInfo.InvariantCulture) + "\""; } else { result = XmlConvert.ToString(floatValue); } break; case TypeCode.Int16: result = ((short)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.UInt16: result = ((ushort)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.Int64: result = ((long)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); if (isIeee754Compatible) { result = "\"" + result + "\""; } break; case TypeCode.UInt64: result = ((ulong)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); if (isIeee754Compatible) { result = "\"" + result + "\""; } break; case TypeCode.Double: double doubleValue = (double)primitiveValue.Value; if (double.IsInfinity(doubleValue) || double.IsNaN(doubleValue)) { result = "\"" + doubleValue.ToString(null, CultureInfo.InvariantCulture) + "\""; } else { result = XmlConvert.ToString(doubleValue); if (writingJsonLight && result.IndexOfAny(new char[] { 'e', 'E', '.' }) < 0) { result += ".0"; } } break; case TypeCode.Decimal: result = ((decimal)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); if (isIeee754Compatible) { result = "\"" + result + "\""; } break; case TypeCode.Byte: result = ((byte)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.SByte: result = ((sbyte)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.String: result = "\"" + WriteEscapedJsonString((string)primitiveValue.Value) + "\""; break; default: if (primitiveValue.Value is DateTime) { DateTime dateTime = (DateTime)primitiveValue.Value; if (dateTime.Kind == DateTimeKind.Local) { dateTime = dateTime.ToUniversalTime(); } else if (dateTime.Kind == DateTimeKind.Unspecified) { dateTime = new DateTime(dateTime.Ticks, DateTimeKind.Utc); } result = String.Format( CultureInfo.InvariantCulture, JsonDateTimeFormat, ((dateTime.Ticks - DateTimeMinTimeTicks) / 10000)); } else if (primitiveValue.Value is DateTimeOffset) { DateTimeOffset dateTimeOffset = (DateTimeOffset)primitiveValue.Value; Int32 offsetMinutes = (Int32)dateTimeOffset.Offset.TotalMinutes; result = String.Format( CultureInfo.InvariantCulture, JsonDateTimeOffsetFormat, ((dateTimeOffset.Ticks - DateTimeMinTimeTicks) / 10000), offsetMinutes >= 0 ? "+" : string.Empty, offsetMinutes); } else if (primitiveValue.Value is Guid) { result = "\"" + ((Guid)primitiveValue.Value).ToString() + "\""; } else if (primitiveValue.Value is byte[]) { result = "\"" + Convert.ToBase64String((byte[])primitiveValue.Value) + "\""; } else if (primitiveValue.Value is TimeSpan) { result = "\"" + XmlConvert.ToString((TimeSpan)primitiveValue.Value) + "\""; } else { throw new TaupoNotSupportedException(string.Format(CultureInfo.InvariantCulture, "Unsupported primitive value type for JSON: {0}", primitiveValue.Value.GetType().FullName)); } break; } } return(new JsonPrimitiveValueTextAnnotation() { Text = result }); }
/// <summary> /// Compares JSON primitive values. /// </summary> /// <param name="expected">Expected primitive value.</param> /// <param name="actual">Actual primitive value.</param> private void ComparePrimitiveValue(JsonPrimitiveValue expected, JsonPrimitiveValue actual) { this.assert.AreEqual(expected.Value, actual.Value, "The primitive values differ."); }
public JsonPrimtivePropertyValue(string Name, JsonPrimitiveValue Value) : base(Name, Value) { }
/// <summary> /// Writes a text representation of the specified <paramref name="primitiveValue"/> into a text writer. /// </summary> /// <param name="primitiveValue">The JSON value to write.</param> private void WritePrimitiveValue(JsonPrimitiveValue primitiveValue) { var textAnnotation = primitiveValue.GetAnnotation<JsonPrimitiveValueTextAnnotation>() ?? JsonPrimitiveValueTextAnnotation.GetDefault(primitiveValue, this.writingJsonLight, isIeee754Compatible); this.writer.Write(textAnnotation.Text); }
/// <summary> /// Visits a json primitive value. /// </summary> /// <param name="primitive">The json primitive being visited.</param> public void Visit(JsonPrimitiveValue primitive) { ExceptionUtilities.CheckArgumentNotNull(primitive, "primitive"); this.writer.WriteRaw(this.convertPrimitive(primitive.Value)); }
/// <summary> /// Returns the default text annotation for a specified primitive value. /// </summary> /// <param name="primitiveValue">The primitive value.</param> /// <param name="writingJsonLight">true if we're writing JSON light, false otherwise.</param> /// <param name="isIeee754Compatible">if it is IEEE754Compatible</param> /// <returns>The default text representation of the primitive value.</returns> public static JsonPrimitiveValueTextAnnotation GetDefault(JsonPrimitiveValue primitiveValue, bool writingJsonLight, bool isIeee754Compatible) { string result = null; if (primitiveValue.Value == null) { result = "null"; } else { switch (Type.GetTypeCode(primitiveValue.Value.GetType())) { case TypeCode.Boolean: result = XmlConvert.ToString((bool)primitiveValue.Value); break; case TypeCode.Int32: result = ((int)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.UInt32: result = ((uint)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.Single: float floatValue = (float)primitiveValue.Value; if (float.IsInfinity(floatValue) || float.IsNaN(floatValue)) { result = "\"" + floatValue.ToString(null, CultureInfo.InvariantCulture) + "\""; } else { result = XmlConvert.ToString(floatValue); } break; case TypeCode.Int16: result = ((short)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.UInt16: result = ((ushort)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.Int64: result = ((long)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); if (isIeee754Compatible) { result = "\"" + result + "\""; } break; case TypeCode.UInt64: result = ((ulong)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); if (isIeee754Compatible) { result = "\"" + result + "\""; } break; case TypeCode.Double: double doubleValue = (double)primitiveValue.Value; if (double.IsInfinity(doubleValue) || double.IsNaN(doubleValue)) { result = "\"" + doubleValue.ToString(null, CultureInfo.InvariantCulture) + "\""; } else { result = XmlConvert.ToString(doubleValue); if (writingJsonLight && result.IndexOfAny(new char[] {'e', 'E', '.'}) < 0) { result += ".0"; } } break; case TypeCode.Decimal: result = ((decimal)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); if (isIeee754Compatible) { result = "\"" + result + "\""; } break; case TypeCode.Byte: result = ((byte)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.SByte: result = ((sbyte)primitiveValue.Value).ToString(CultureInfo.InvariantCulture); break; case TypeCode.String: result = "\"" + WriteEscapedJsonString((string)primitiveValue.Value) + "\""; break; default: if (primitiveValue.Value is DateTime) { DateTime dateTime = (DateTime)primitiveValue.Value; if (dateTime.Kind == DateTimeKind.Local) { dateTime = dateTime.ToUniversalTime(); } else if (dateTime.Kind == DateTimeKind.Unspecified) { dateTime = new DateTime(dateTime.Ticks, DateTimeKind.Utc); } result = String.Format( CultureInfo.InvariantCulture, JsonDateTimeFormat, ((dateTime.Ticks - DateTimeMinTimeTicks) / 10000)); } else if (primitiveValue.Value is DateTimeOffset) { DateTimeOffset dateTimeOffset = (DateTimeOffset)primitiveValue.Value; Int32 offsetMinutes = (Int32)dateTimeOffset.Offset.TotalMinutes; result = String.Format( CultureInfo.InvariantCulture, JsonDateTimeOffsetFormat, ((dateTimeOffset.Ticks - DateTimeMinTimeTicks) / 10000), offsetMinutes >= 0 ? "+" : string.Empty, offsetMinutes); } else if (primitiveValue.Value is Guid) { result = "\"" + ((Guid)primitiveValue.Value).ToString() + "\""; } else if (primitiveValue.Value is byte[]) { result = "\"" + Convert.ToBase64String((byte[])primitiveValue.Value) + "\""; } else if (primitiveValue.Value is TimeSpan) { result = "\"" + XmlConvert.ToString((TimeSpan)primitiveValue.Value) + "\""; } else { throw new TaupoNotSupportedException(string.Format(CultureInfo.InvariantCulture, "Unsupported primitive value type for JSON: {0}", primitiveValue.Value.GetType().FullName)); } break; } } return new JsonPrimitiveValueTextAnnotation() { Text = result }; }
/// <summary> /// Parses the token of type bool /// </summary> /// <returns>Parsed Bool Value</returns> private JsonPrimitiveValue ParseBool() { var result = this.tokenizer.Value; var textAnnotation = new JsonPrimitiveValueTextAnnotation() { Text = this.tokenizer.TokenText }; this.tokenizer.GetNextToken(); var primitiveValue = new JsonPrimitiveValue(result); primitiveValue.SetAnnotation(textAnnotation); return primitiveValue; }
/// <summary> /// Visits the specified primitive. /// </summary> /// <param name="primitive">The primitive.</param> /// <returns>The converted object</returns> public object Visit(JsonPrimitiveValue primitive) { ExceptionUtilities.CheckArgumentNotNull(primitive, "primitive"); return(primitive.Value); }