Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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
            });
        }
Exemplo n.º 6
0
 /// <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.");
 }
Exemplo n.º 7
0
 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);
 }
Exemplo n.º 9
0
 /// <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));
 }
Exemplo n.º 10
0
 /// <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 };
        }
Exemplo n.º 12
0
 /// <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;
 }
Exemplo n.º 13
0
 /// <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.");
 }
 /// <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);
 }