public void ReadLiteralFalse(string content) { using (var stream = CreateTextReader(content)) { var buffer = new JsonBuffer(stream); Assert.NotNull(buffer); var token = buffer.Read(); Assert.Equal(JsonTokenType.False, token.Type); } }
public void ReadTokenThroughLockFileSample() { using (var stream = File.OpenRead(Path.Combine("TestSample", "project.lock.sample"))) { var reader = new StreamReader(stream); var buffer = new JsonBuffer(reader); Assert.NotNull(buffer); while (buffer.Read().Type != JsonTokenType.EOF) ; } }
public void BasicReadToken() { var content = @" { ""key1"": ""value1"", ""key2"": 99, ""key3"": true, ""key4"": [""str1"", ""str2"", ""str3""], ""key5"": { ""subkey1"": ""subvalue1"", ""subkey2"": [1, 2] }, ""key6"": null }"; using (var stream = CreateTextReader(content)) { var buffer = new JsonBuffer(stream); Assert.NotNull(buffer); while (buffer.Read().Type != JsonTokenType.EOF) ; } }
static JsonObject DeserializeObject(JsonToken head, JsonBuffer buffer) { var dictionary = new Dictionary<string, JsonValue>(); // Loop through each JSON entry in the input object while (true) { var next = buffer.Read(); if (next.Type == JsonTokenType.EOF) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object", '}'), next); } if (next.Type == JsonTokenType.Colon) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxNotExpected("JSON object", ':'), next); } else if (next.Type == JsonTokenType.RightCurlyBracket) { break; } else { if (next.Type != JsonTokenType.String) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object member name", "JSON string"), next); } var memberName = next.Value; if (dictionary.ContainsKey(memberName)) { throw new JsonDeserializerException( JsonDeserializerResource.Format_DuplicateObjectMemberName(memberName), next); } next = buffer.Read(); if (next.Type != JsonTokenType.Colon) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object", ':'), next); } dictionary[memberName] = DeserializeInternal(buffer.Read(), buffer); next = buffer.Read(); if (next.Type == JsonTokenType.RightCurlyBracket) { break; } else if (next.Type != JsonTokenType.Comma) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object", ',', '}'), next); } } } return new JsonObject(dictionary, head.Line, head.Column); }
static JsonArray DeserializeArray(JsonToken head, JsonBuffer buffer) { var list = new List<JsonValue>(); while (true) { var next = buffer.Read(); if (next.Type == JsonTokenType.RightSquareBracket) { break; } list.Add(DeserializeInternal(next, buffer)); next = buffer.Read(); if (next.Type == JsonTokenType.EOF) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON array", ']', ','), next); } else if (next.Type == JsonTokenType.RightSquareBracket) { break; } else if (next.Type != JsonTokenType.Comma) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON array", ','), next); } } return new JsonArray(list.ToArray(), head.Line, head.Column); }
static JsonValue DeserializeInternal(JsonToken next, JsonBuffer buffer) { if (next.Type == JsonTokenType.EOF) { return null; } if (next.Type == JsonTokenType.LeftSquareBracket) { return DeserializeArray(next, buffer); } if (next.Type == JsonTokenType.LeftCurlyBracket) { return DeserializeObject(next, buffer); } if (next.Type == JsonTokenType.String) { return new JsonString(next.Value, next.Line, next.Column); } if (next.Type == JsonTokenType.True || next.Type == JsonTokenType.False) { return new JsonBoolean(next); } if (next.Type == JsonTokenType.Null) { return new JsonNull(next.Line, next.Column); } if (next.Type == JsonTokenType.Number) { return new JsonNumber(next); } throw new JsonDeserializerException(JsonDeserializerResource.Format_InvalidTokenExpectation( next.Value, "'{', '[', true, false, null, JSON string, JSON number, or the end of the file"), next); }
public static JsonValue Deserialize(TextReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } var buffer = new JsonBuffer(reader); var result = DeserializeInternal(buffer.Read(), buffer); // There are still unprocessed char. The parsing is not finished. Error happened. var nextToken = buffer.Read(); if (nextToken.Type != JsonTokenType.EOF) { throw new JsonDeserializerException( JsonDeserializerResource.Format_UnfinishedJSON(nextToken.Value), nextToken); } return result; }
public void ReadUnicode() { var content = "\"Unicode string \\u00A9\""; using (var stream = CreateTextReader(content)) { var buffer = new JsonBuffer(stream); Assert.NotNull(buffer); var token = buffer.Read(); Assert.Equal(JsonTokenType.String, token.Type); Assert.Equal(16, token.Value.Length); } }
public void ReadThroughArray(string content) { using (var stream = CreateTextReader(content)) { var buffer = new JsonBuffer(stream); Assert.NotNull(buffer); var tokens = new List<JsonToken>(); do { tokens.Add(buffer.Read()); } while (tokens[tokens.Count - 1].Type != JsonTokenType.EOF); Assert.Equal(JsonTokenType.LeftSquareBracket, tokens[0].Type); Assert.Equal(JsonTokenType.RightSquareBracket, tokens[tokens.Count - 2].Type); } }
public void ReadLiteralThrowException(string content) { using (var stream = CreateTextReader(content)) { var buffer = new JsonBuffer(stream); Assert.NotNull(buffer); Assert.Throws<JsonDeserializerException>(() => { buffer.Read(); }); } }
static JsonObject DeserializeObject(JsonToken head, JsonBuffer buffer) { var dictionary = new Dictionary <string, JsonValue>(); // Loop through each JSON entry in the input object while (true) { var next = buffer.Read(); if (next.Type == JsonTokenType.EOF) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object", '}'), next); } if (next.Type == JsonTokenType.Colon) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxNotExpected("JSON object", ':'), next); } else if (next.Type == JsonTokenType.RightCurlyBracket) { break; } else { if (next.Type != JsonTokenType.String) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object member name", "JSON string"), next); } var memberName = next.Value; if (dictionary.ContainsKey(memberName)) { throw new JsonDeserializerException( JsonDeserializerResource.Format_DuplicateObjectMemberName(memberName), next); } next = buffer.Read(); if (next.Type != JsonTokenType.Colon) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object", ':'), next); } dictionary[memberName] = DeserializeInternal(buffer.Read(), buffer); next = buffer.Read(); if (next.Type == JsonTokenType.RightCurlyBracket) { break; } else if (next.Type != JsonTokenType.Comma) { throw new JsonDeserializerException( JsonDeserializerResource.Format_InvalidSyntaxExpectation("JSON object", ',', '}'), next); } } } return(new JsonObject(dictionary, head.Line, head.Column)); }