public static ServerInformation[] Deserialize(Stream stream) { var reader = new JsonTextReader(new StreamReader(stream)); var response = new List<ServerInformation>(1200); var currentProperty = string.Empty; reader.MatchNext(JsonToken.StartArray); while (reader.IsMatchNext(JsonToken.StartObject)) { var entry = new ServerInformation(); while (reader.Until(JsonToken.EndObject)) { switch (reader.TokenType) { case JsonToken.PropertyName: currentProperty = reader.Value.ToString(); break; case JsonToken.String: switch (currentProperty) { case "ip": entry.Ip = reader.Value.ToString(); break; case "name": entry.Name = reader.Value.ToString(); break; case "track": entry.TrackId = reader.Value.ToString(); break; } break; case JsonToken.Integer: switch (currentProperty) { case "port": entry.Port = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "cport": entry.PortC = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "tport": entry.PortT = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "clients": entry.Clients = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "maxclients": entry.Capacity = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "timeofday": entry.Time = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "session": entry.Session = int.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "timeleft": entry.TimeLeft = long.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "timestamp": entry.Timestamp = long.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; case "lastupdate": entry.LastUpdate = long.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); break; } break; case JsonToken.Boolean: switch (currentProperty) { case "pass": entry.Password = bool.Parse(reader.Value.ToString()); break; case "pickup": entry.PickUp = bool.Parse(reader.Value.ToString()); break; case "l": entry.L = bool.Parse(reader.Value.ToString()); break; } break; case JsonToken.StartArray: switch (currentProperty) { case "cars": entry.CarIds = reader.ReadStringArray(1); break; case "sessiontypes": entry.SessionTypes = reader.ReadIntArray(1); break; case "durations": entry.Durations = reader.ReadLongArray(1); break; case "country": entry.Country = reader.ReadStringArray(2); break; default: while (reader.Until(JsonToken.EndArray)) { } break; } break; default: throw new Exception("Unexpected token: " + reader.TokenType); } } response.Add(entry); } return response.ToArray(); }