private static IJsonValue ParseValue(this IJsonReader reader) { reader.Read(); if (reader.CurrentToken == Json.Token.String) { return(new JsonString((string)reader.CurrentValue)); } else if (reader.CurrentToken == Json.Token.Integer) { return(new JsonFloat((int)reader.CurrentValue)); } else if (reader.CurrentToken == Json.Token.Float) { return(new JsonFloat((float)reader.CurrentValue)); } else if (reader.CurrentToken == Json.Token.Boolean) { return(new JsonBool((bool)reader.CurrentValue)); } else if (reader.CurrentToken == Json.Token.ArrayStart) { var array = new JsonArray(); while (reader.CurrentToken != Json.Token.EndOfFile) { var value = reader.ParseValue(); if (reader.CurrentToken == Json.Token.ArrayEnd) { break; } array.Add(value); } return(array); } else if (reader.CurrentToken == Json.Token.ObjectStart) { return(reader.ParseObject()); } return(null); }