private static ServerInformationComplete[] DeserializeFast(Stream stream) { var reader = new JsonTextReader(new StreamReader(stream)); var response = new List <ServerInformationComplete>(AverageServersCount); var currentProperty = string.Empty; reader.MatchNext(JsonToken.StartArray); while (reader.IsMatchNext(JsonToken.StartObject)) { var entry = new ServerInformationComplete(); while (reader.Until(JsonToken.EndObject)) { SetToken(reader, ref currentProperty, entry); } response.Add(entry); } return(response.ToArray()); }
private static SessionStats Deserialize(string data) { try { using (var textReader = new StringReader(data)) { var reader = new JsonTextReader(textReader); var r = new SessionStats(); var currentProperty = string.Empty; reader.MatchNext(JsonToken.StartObject); while (reader.Until(JsonToken.EndObject)) { switch (reader.TokenType) { case JsonToken.PropertyName: currentProperty = reader.Value.ToString(); break; case JsonToken.String: switch (currentProperty) { case nameof(CarId): r.CarId = reader.Value.ToString(); break; case nameof(TrackId): r.TrackId = FixTrackId(reader.Value.ToString()); break; case nameof(Time): r.Time = TimeSpan.Parse(reader.Value.ToString()); break; case nameof(BestLap): r.BestLap = TimeSpan.Parse(reader.Value.ToString()); break; default: throw new Exception($"Unknown key: {currentProperty} (String)"); } break; case JsonToken.Date: switch (currentProperty) { case nameof(StartedAt): r.StartedAt = DateTime.Parse(reader.Value.ToString()); break; default: throw new Exception($"Unknown key: {currentProperty} (Date)"); } break; case JsonToken.Float: case JsonToken.Integer: var val = double.Parse(reader.Value.ToString(), CultureInfo.InvariantCulture); switch (currentProperty) { case nameof(MaxSpeed): r.MaxSpeed = val; break; case nameof(Distance): r.Distance = val; break; case nameof(FuelBurnt): r.FuelBurnt = val; break; case nameof(LongestAirborne): r.LongestAirborne = val; break; case nameof(TotalAirborne): r.TotalAirborne = val; break; case nameof(LongestWheelie): r.LongestWheelie = val; break; case nameof(TotalWheelie): r.TotalWheelie = val; break; case nameof(LongestTwoWheels): r.LongestTwoWheels = val; break; case nameof(TotalTwoWheels): r.TotalTwoWheels = val; break; case nameof(TotalTyreWear): r.TotalTyreWear = val; break; case nameof(GoneOffroad): r.GoneOffroad = (int)val; break; case nameof(TotalCrashes): r.TotalCrashes = (int)val; break; case nameof(BestLapId): r.BestLapId = (int?)val; break; default: throw new Exception($"Unknown key: {currentProperty} (Integer/Float)"); } break; case JsonToken.Boolean: switch (currentProperty) { case nameof(Penalties): r.Penalties = bool.Parse(reader.Value.ToString()); break; default: throw new Exception($"Unknown key: {currentProperty} (Boolean)"); } break; default: throw new Exception($"Unexpected token: {reader.TokenType}"); } } return(r); } } catch (Exception e) { Logging.Error(e); return(JsonConvert.DeserializeObject <SessionStats>(data)); } }