Ejemplo n.º 1
0
        /// <summary>
        /// Sets json array annotation text with whitespaces.
        /// </summary>
        /// <param name="transformedPayload">Transformed payload with json annotations.</param>
        private void SetWhiteSpaceJsonArrayAnnotations(JsonValue transformedPayload)
        {
            JsonArrayElementSeparatorTextAnnotation jsonArrayElementSeparatorTextAnnotation = new JsonArrayElementSeparatorTextAnnotation();
            JsonEndArrayTextAnnotation   jsonEndArrayTextAnnotation   = new JsonEndArrayTextAnnotation();
            JsonStartArrayTextAnnotation jsonStartArrayTextAnnotation = new JsonStartArrayTextAnnotation();

            jsonArrayElementSeparatorTextAnnotation.Text = "\t\n , \t\n";
            jsonEndArrayTextAnnotation.Text   = "\t\n ] \t\n";
            jsonStartArrayTextAnnotation.Text = "\t\n [ \t\n";

            transformedPayload.SetAnnotation <JsonArrayElementSeparatorTextAnnotation>(jsonArrayElementSeparatorTextAnnotation);
            transformedPayload.SetAnnotation <JsonEndArrayTextAnnotation>(jsonEndArrayTextAnnotation);
            transformedPayload.SetAnnotation <JsonStartArrayTextAnnotation>(jsonStartArrayTextAnnotation);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Writes a text representation of the specified <paramref name="arrayValue"/> into a text writer.
        /// </summary>
        /// <param name="arrayValue">The JSON value to write.</param>
        private void WriteArray(JsonArray arrayValue)
        {
            var startArrayTextAnnotation = arrayValue.GetAnnotation <JsonStartArrayTextAnnotation>()
                                           ?? JsonStartArrayTextAnnotation.GetDefault(this.writer);
            var endArrayTextAnnotation = arrayValue.GetAnnotation <JsonEndArrayTextAnnotation>()
                                         ?? JsonEndArrayTextAnnotation.GetDefault(this.writer);

            this.writer.Write(startArrayTextAnnotation.Text);

            bool first = true;

            foreach (JsonValue element in arrayValue.Elements)
            {
                var arrayElementSeparatorTextAnnotation = element.GetAnnotation <JsonArrayElementSeparatorTextAnnotation>()
                                                          ?? JsonArrayElementSeparatorTextAnnotation.GetDefault(first);
                first = false;

                this.writer.Write(arrayElementSeparatorTextAnnotation.Text);
                this.WriteValue(element);
            }

            this.writer.Write(endArrayTextAnnotation.Text);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Parses the token of type array
        /// </summary>
        /// <returns>Parsed array</returns>
        private JsonArray ParseArray()
        {
            // Array can start only with '['
            ExceptionUtilities.Assert(this.tokenizer.TokenType == JsonTokenType.LeftSquareBracket, "Invalid Token");

            // Should not end before we get ']'
            ExceptionUtilities.Assert(this.tokenizer.HasMoreTokens(), "Invalid End Of Stream");
            var startArrayTextAnnotation = new JsonStartArrayTextAnnotation()
            {
                Text = this.tokenizer.TokenText
            };

            this.tokenizer.GetNextToken();

            // Array is an ordered collection of values
            ExceptionUtilities.Assert(this.IsValueType(this.tokenizer.TokenType) || this.tokenizer.TokenType == JsonTokenType.RightSquareBracket, "InvalidToken");
            var result = new JsonArray();

            result.SetAnnotation(startArrayTextAnnotation);
            JsonArrayElementSeparatorTextAnnotation arrayElementSeparatorTextAnnotation = null;

            while (this.tokenizer.HasMoreTokens())
            {
                if (this.IsValueType(this.tokenizer.TokenType))
                {
                    JsonValue v = this.ParseValue();
                    result.Add(v);
                    if (arrayElementSeparatorTextAnnotation != null)
                    {
                        v.SetAnnotation(arrayElementSeparatorTextAnnotation);
                        arrayElementSeparatorTextAnnotation = null;
                    }

                    // Values are separated by , (comma).
                    ExceptionUtilities.Assert(this.tokenizer.TokenType == JsonTokenType.Comma || this.tokenizer.TokenType == JsonTokenType.RightSquareBracket, "Invalid Token");
                }
                else if (this.tokenizer.TokenType == JsonTokenType.RightSquareBracket)
                {
                    break;
                }
                else if (this.tokenizer.TokenType == JsonTokenType.Comma)
                {
                    arrayElementSeparatorTextAnnotation = new JsonArrayElementSeparatorTextAnnotation()
                    {
                        Text = this.tokenizer.TokenText
                    };
                    this.tokenizer.GetNextToken();

                    // Last element of the array cannot be followed by a comma.
                    ExceptionUtilities.Assert(this.IsValueType(this.tokenizer.TokenType) || this.tokenizer.TokenType == JsonTokenType.RightSquareBracket, "InvalidToken");
                }
            }

            if (this.tokenizer.TokenType == JsonTokenType.RightSquareBracket)
            {
                result.SetAnnotation(new JsonEndArrayTextAnnotation()
                {
                    Text = this.tokenizer.TokenText
                });

                if (this.tokenizer.HasMoreTokens())
                {
                    this.tokenizer.GetNextToken();
                }
            }

            return(result);
        }