/// <summary> /// Extracts all departures for a given stop and its lines /// </summary> /// <param name="jsonData">Digitransit GraphQL query result in JSON format</param> /// <param name="stops">List of stops with lines to populate departures</param> /// <returns>Stop with lines with list of upcoming departures</returns> public List <Stop> ParseDepartureDataJson(List <string> jsonData, List <Stop> stops) { foreach (var json in jsonData) { // Deserialize using JSON.net Data.Digitransit.Digitransit temp = JsonConvert.DeserializeObject <Data.Digitransit.Digitransit>(json); // Find stop by matching GTFS Id Stop stop = stops.Find(s => s.GtfsId == temp.Data.Stop.GtfsId); // Alternative option - loop through lines foreach (var line in stop.Lines) { // Find corresponding pattern var departure = temp.Data.Stop.StoptimesForPatterns.Find(dep => dep.Pattern.Code.Contains(line.Code)); List <DateTime> departures = new List <DateTime>(); // Set departure time foreach (var stopTime in departure.Stoptimes) { DateTimeOffset offset = DateTimeOffset.FromUnixTimeSeconds(stopTime.ScheduledDeparture); DateTime departureTime = DateTime.Today.AddHours(offset.Hour).AddMinutes(offset.Minute); departures.Add(departureTime); } line.SetDepartures(departures); } /* Scan departures and find for matching lines * foreach(var departure in temp.Data.Stop.StoptimesForPatterns) * { * // For lines e.g. 6T there's a problem. It returns internal line 6 instead of 6T * Line line = stop.Lines.Find(l => departure.Pattern.Code.Contains(l.Code)); * * if(line != null) * { * List<DateTime> departures = new List<DateTime>(); * * // Set departure time * foreach(var stopTime in departure.Stoptimes) * { * DateTimeOffset offset = DateTimeOffset.FromUnixTimeSeconds(stopTime.ScheduledDeparture); * DateTime departureTime = DateTime.Today.AddHours(offset.Hour).AddMinutes(offset.Minute); * departures.Add(departureTime); * } * * line.SetDepartures(departures); * } * }*/ } return(stops); }
public List <Stop> ParseStopsFromJSON(string input) { List <Stop> stops = new List <Stop>(); Data.Digitransit.Digitransit elements = JsonConvert.DeserializeObject <Data.Digitransit.Digitransit>(input); foreach (var element in elements.Data.stops) { Stop stop = new Stop(); stop.Code = element.Code; stop.Name = element.Name; stops.Add(stop); } return(stops); }