internal static JsonTokenInfo[] GetTokensFromNode(IJsonNavigatorNode node, IJsonNavigator navigator, bool performCorrectnessCheck)
        {
            switch (navigator.GetNodeType(node))
            {
            case JsonNodeType.Null:
                return(new JsonTokenInfo[] { JsonTokenInfo.Null() });

            case JsonNodeType.False:
                return(new JsonTokenInfo[] { JsonTokenInfo.Boolean(false) });

            case JsonNodeType.True:
                return(new JsonTokenInfo[] { JsonTokenInfo.Boolean(true) });

            case JsonNodeType.Number:
                return(new JsonTokenInfo[] { JsonTokenInfo.Number(navigator.GetNumberValue(node)) });

            case JsonNodeType.String:
                return(new JsonTokenInfo[] { JsonTokenInfo.String(navigator.GetStringValue(node)) });

            case JsonNodeType.Array:
                return(JsonNavigatorTests.GetTokensFromArrayNode(node, navigator, performCorrectnessCheck));

            case JsonNodeType.Object:
                return(JsonNavigatorTests.GetTokensFromObjectNode(node, navigator, performCorrectnessCheck));

            case JsonNodeType.FieldName:
                return(new JsonTokenInfo[] { JsonTokenInfo.FieldName(navigator.GetStringValue(node)) });

            default:
                throw new InvalidOperationException();
            }
        }
        internal static JsonTokenInfo[] GetTokensWithReader(IJsonReader jsonReader)
        {
            List <JsonTokenInfo> tokens = new List <JsonTokenInfo>();

            while (jsonReader.Read())
            {
                switch (jsonReader.CurrentTokenType)
                {
                case JsonTokenType.NotStarted:
                    throw new InvalidOperationException();

                case JsonTokenType.BeginArray:
                    tokens.Add(JsonTokenInfo.ArrayStart());
                    break;

                case JsonTokenType.EndArray:
                    tokens.Add(JsonTokenInfo.ArrayEnd());
                    break;

                case JsonTokenType.BeginObject:
                    tokens.Add(JsonTokenInfo.ObjectStart());
                    break;

                case JsonTokenType.EndObject:
                    tokens.Add(JsonTokenInfo.ObjectEnd());
                    break;

                case JsonTokenType.String:
                    tokens.Add(JsonTokenInfo.String(jsonReader.GetStringValue()));
                    break;

                case JsonTokenType.Number:
                    tokens.Add(JsonTokenInfo.Number(jsonReader.GetNumberValue()));
                    break;

                case JsonTokenType.True:
                    tokens.Add(JsonTokenInfo.Boolean(true));
                    break;

                case JsonTokenType.False:
                    tokens.Add(JsonTokenInfo.Boolean(false));
                    break;

                case JsonTokenType.Null:
                    tokens.Add(JsonTokenInfo.Null());
                    break;

                case JsonTokenType.FieldName:
                    tokens.Add(JsonTokenInfo.FieldName(jsonReader.GetStringValue()));
                    break;

                default:
                    break;
                }
            }

            return(tokens.ToArray());
        }
Пример #3
0
        public static JsonTokenInfo[] Tokenize(IJsonReader jsonReader, string json)
        {
            List <JsonTokenInfo> tokensFromReader = new List <JsonTokenInfo>();

            while (jsonReader.Read())
            {
                switch (jsonReader.CurrentTokenType)
                {
                case JsonTokenType.NotStarted:
                    throw new ArgumentException(string.Format("Got an unexpected JsonTokenType: {0} as an expected token type", jsonReader.CurrentTokenType));

                case JsonTokenType.BeginArray:
                    tokensFromReader.Add(JsonTokenInfo.ArrayStart());
                    break;

                case JsonTokenType.EndArray:
                    tokensFromReader.Add(JsonTokenInfo.ArrayEnd());
                    break;

                case JsonTokenType.BeginObject:
                    tokensFromReader.Add(JsonTokenInfo.ObjectStart());
                    break;

                case JsonTokenType.EndObject:
                    tokensFromReader.Add(JsonTokenInfo.ObjectEnd());
                    break;

                case JsonTokenType.String:
                    tokensFromReader.Add(JsonTokenInfo.String(jsonReader.GetStringValue()));
                    break;

                case JsonTokenType.Number:
                    tokensFromReader.Add(JsonTokenInfo.Number(jsonReader.GetNumberValue()));
                    break;

                case JsonTokenType.True:
                    tokensFromReader.Add(JsonTokenInfo.Boolean(true));
                    break;

                case JsonTokenType.False:
                    tokensFromReader.Add(JsonTokenInfo.Boolean(false));
                    break;

                case JsonTokenType.Null:
                    tokensFromReader.Add(JsonTokenInfo.Null());
                    break;

                case JsonTokenType.FieldName:
                    tokensFromReader.Add(JsonTokenInfo.FieldName(jsonReader.GetStringValue()));
                    break;

                default:
                    break;
                }
            }

            return(tokensFromReader.ToArray());
        }
        public void SimpleObjectTest()
        {
            string input = "{\"GlossDiv\":10,\"title\": \"example glossary\" }";

            JsonTokenInfo[] token =
            {
                JsonTokenInfo.ObjectStart(),
                JsonTokenInfo.FieldName("GlossDiv"),
                JsonTokenInfo.Number(10),
                JsonTokenInfo.FieldName("title"),
                JsonTokenInfo.String("example glossary"),
                JsonTokenInfo.ObjectEnd(),
            };

            this.PerformRoundTripTest(input, token);
        }
        internal static JsonTokenInfo[] GetTokensFromObjectNode(IJsonNavigatorNode node, IJsonNavigator navigator, bool performCorrectnessCheck)
        {
            // Get the tokens through .GetObjectProperties
            List <JsonTokenInfo>         tokensFromGetProperties = new List <JsonTokenInfo>();
            IEnumerable <ObjectProperty> properties = navigator.GetObjectProperties(node);

            tokensFromGetProperties.Add(JsonTokenInfo.ObjectStart());
            foreach (ObjectProperty property in properties)
            {
                string fieldname = navigator.GetStringValue(property.NameNode);
                tokensFromGetProperties.Add(JsonTokenInfo.FieldName(fieldname));
                tokensFromGetProperties.AddRange(JsonNavigatorTests.GetTokensFromNode(property.ValueNode, navigator, performCorrectnessCheck));
            }
            tokensFromGetProperties.Add(JsonTokenInfo.ObjectEnd());

            if (performCorrectnessCheck)
            {
                // Get the tokens again through .TryGetObjectProperty
                List <JsonTokenInfo> tokensFromTryGetProperty = new List <JsonTokenInfo>();

                tokensFromTryGetProperty.Add(JsonTokenInfo.ObjectStart());
                foreach (ObjectProperty objectProperty in properties)
                {
                    ObjectProperty propertyFromTryGetProperty;
                    string         fieldname = navigator.GetStringValue(objectProperty.NameNode);
                    if (navigator.TryGetObjectProperty(node, fieldname, out propertyFromTryGetProperty))
                    {
                        tokensFromTryGetProperty.Add(JsonTokenInfo.FieldName(fieldname));
                        tokensFromTryGetProperty.AddRange(JsonNavigatorTests.GetTokensFromNode(propertyFromTryGetProperty.ValueNode, navigator, performCorrectnessCheck));
                    }
                    else
                    {
                        Assert.Fail($"Failed to get object property with name: {fieldname}");
                    }
                }
                tokensFromTryGetProperty.Add(JsonTokenInfo.ObjectEnd());
                Assert.AreEqual(properties.Count(), navigator.GetObjectPropertyCount(node));
                Assert.IsTrue(tokensFromGetProperties.SequenceEqual(tokensFromTryGetProperty));
            }

            return(tokensFromGetProperties.ToArray());
        }
        public void AllPrimitivesObjectTest()
        {
            string input = @"{
                ""id"": ""7029d079-4016-4436-b7da-36c0bae54ff6"",
                ""double"": 0.18963001816981939,
                ""int"": -1330192615,
                ""string"": ""XCPCFXPHHF"",
                ""boolean"": true,
                ""null"": null,
                ""datetime"": ""2526-07-11T18:18:16.4520716"",
                ""spatialPoint"": {
                    ""type"": ""Point"",
                    ""coordinates"": [
                        118.9897,
                        -46.6781
                    ]
                },
                ""text"": ""tiger diamond newbrunswick snowleopard chocolate dog snowleopard turtle cat sapphire peach sapphire vancouver white chocolate horse diamond lion superlongcolourname ruby""
            }";

            JsonTokenInfo[] token =
            {
                JsonTokenInfo.ObjectStart(),

                JsonTokenInfo.FieldName("id"),
                JsonTokenInfo.String("7029d079-4016-4436-b7da-36c0bae54ff6"),

                JsonTokenInfo.FieldName("double"),
                JsonTokenInfo.Number(0.18963001816981939),

                JsonTokenInfo.FieldName("int"),
                JsonTokenInfo.Number(-1330192615),

                JsonTokenInfo.FieldName("string"),
                JsonTokenInfo.String("XCPCFXPHHF"),

                JsonTokenInfo.FieldName("boolean"),
                JsonTokenInfo.Boolean(true),

                JsonTokenInfo.FieldName("null"),
                JsonTokenInfo.Null(),

                JsonTokenInfo.FieldName("datetime"),
                JsonTokenInfo.String("2526-07-11T18:18:16.4520716"),

                JsonTokenInfo.FieldName("spatialPoint"),
                JsonTokenInfo.ObjectStart(),
                JsonTokenInfo.FieldName("type"),
                JsonTokenInfo.String("Point"),

                JsonTokenInfo.FieldName("coordinates"),
                JsonTokenInfo.ArrayStart(),
                JsonTokenInfo.Number(118.9897),
                JsonTokenInfo.Number(-46.6781),
                JsonTokenInfo.ArrayEnd(),
                JsonTokenInfo.ObjectEnd(),

                JsonTokenInfo.FieldName("text"),
                JsonTokenInfo.String("tiger diamond newbrunswick snowleopard chocolate dog snowleopard turtle cat sapphire peach sapphire vancouver white chocolate horse diamond lion superlongcolourname ruby"),
                JsonTokenInfo.ObjectEnd(),
            };

            this.PerformRoundTripTest(input, token);
        }