private 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)); }
private 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)); }