// // // To parse this JSON data, add NuGet 'Newtonsoft.Json' then do: // // using JSON; // // var Spritpreisrechnerat = Spritpreisrechnerat.FromJson(jsonString); namespace JSON { using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Spritpreisrechnerat { [JsonProperty("id")] public long Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("location")] public Location Location { get; set; } [JsonProperty("contact")] public Contact Contact { get; set; } [JsonProperty("openingHours")] public OpeningHour[] OpeningHours { get; set; } [JsonProperty("offerInformation")] public OfferInformation OfferInformation { get; set; } [JsonProperty("paymentMethods")] public PaymentMethods PaymentMethods { get; set; } [JsonProperty("paymentArrangements")] public PaymentArrangements PaymentArrangements { get; set; } [JsonProperty("position")] public long Position { get; set; } [JsonProperty("open")] public bool Open { get; set; } [JsonProperty("distance")] public double Distance { get; set; } [JsonProperty("prices")] public Price[] Prices { get; set; } [JsonProperty("otherServiceOffers", NullValueHandling = NullValueHandling.Ignore)] public string OtherServiceOffers { get; set; } } public partial class Contact { [JsonProperty("mail", NullValueHandling = NullValueHandling.Ignore)] public string Mail { get; set; } [JsonProperty("telephone", NullValueHandling = NullValueHandling.Ignore)] public string Telephone { get; set; } [JsonProperty("fax", NullValueHandling = NullValueHandling.Ignore)] public string Fax { get; set; } [JsonProperty("website", NullValueHandling = NullValueHandling.Ignore)] public string Website { get; set; } } public partial class Location { [JsonProperty("address")] public string Address { get; set; } [JsonProperty("postalCode")] [JsonConverter(typeof(ParseStringConverter))] public long PostalCode { get; set; } [JsonProperty("city")] public City City { get; set; } [JsonProperty("latitude")] public double Latitude { get; set; } [JsonProperty("longitude")] public double Longitude { get; set; } } public partial class OfferInformation { [JsonProperty("service")] public bool Service { get; set; } [JsonProperty("selfService")] public bool SelfService { get; set; } [JsonProperty("unattended")] public bool Unattended { get; set; } } public partial class OpeningHour { [JsonProperty("day")] public Day Day { get; set; } [JsonProperty("label")] public Label Label { get; set; } [JsonProperty("order")] public long Order { get; set; } [JsonProperty("from")] public From From { get; set; } [JsonProperty("to")] public To To { get; set; } } public partial class PaymentArrangements { [JsonProperty("cooperative")] public bool Cooperative { get; set; } [JsonProperty("clubCard")] public bool ClubCard { get; set; } } public partial class PaymentMethods { [JsonProperty("cash")] public bool Cash { get; set; } [JsonProperty("debitCard")] public bool DebitCard { get; set; } [JsonProperty("creditCard")] public bool CreditCard { get; set; } [JsonProperty("others", NullValueHandling = NullValueHandling.Ignore)] public string Others { get; set; } } public partial class Price { [JsonProperty("fuelType")] public string FuelType { get; set; } [JsonProperty("amount")] public double Amount { get; set; } [JsonProperty("label")] public string Label { get; set; } } public enum City { Wien }; public enum Day { Di, Do, Fe, Fr, Mi, Mo, Sa, So }; public enum From { The0000, The0600, The0700 }; public enum Label { Dienstag, Donnerstag, Feiertag, Freitag, Mittwoch, Montag, Samstag, Sonntag }; public enum To { The2000, The2100, The2200, The2400 }; public partial class Spritpreisrechnerat { public static Spritpreisrechnerat[] FromJson(string json) => JsonConvert.DeserializeObject(json, JSON.Converter.Settings); } public static class Serialize { public static string ToJson(this Spritpreisrechnerat[] self) => JsonConvert.SerializeObject(self, JSON.Converter.Settings); } internal static class Converter { public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore, DateParseHandling = DateParseHandling.None, Converters = { CityConverter.Singleton, DayConverter.Singleton, FromConverter.Singleton, LabelConverter.Singleton, ToConverter.Singleton, new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } }, }; } internal class CityConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(City) || t == typeof(City?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); if (value == "Wien") { return City.Wien; } throw new Exception("Cannot unmarshal type City"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (City)untypedValue; if (value == City.Wien) { serializer.Serialize(writer, "Wien"); return; } throw new Exception("Cannot marshal type City"); } public static readonly CityConverter Singleton = new CityConverter(); } internal class ParseStringConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); long l; if (Int64.TryParse(value, out l)) { return l; } throw new Exception("Cannot unmarshal type long"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (long)untypedValue; serializer.Serialize(writer, value.ToString()); return; } public static readonly ParseStringConverter Singleton = new ParseStringConverter(); } internal class DayConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Day) || t == typeof(Day?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); switch (value) { case "DI": return Day.Di; case "DO": return Day.Do; case "FE": return Day.Fe; case "FR": return Day.Fr; case "MI": return Day.Mi; case "MO": return Day.Mo; case "SA": return Day.Sa; case "SO": return Day.So; } throw new Exception("Cannot unmarshal type Day"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Day)untypedValue; switch (value) { case Day.Di: serializer.Serialize(writer, "DI"); return; case Day.Do: serializer.Serialize(writer, "DO"); return; case Day.Fe: serializer.Serialize(writer, "FE"); return; case Day.Fr: serializer.Serialize(writer, "FR"); return; case Day.Mi: serializer.Serialize(writer, "MI"); return; case Day.Mo: serializer.Serialize(writer, "MO"); return; case Day.Sa: serializer.Serialize(writer, "SA"); return; case Day.So: serializer.Serialize(writer, "SO"); return; } throw new Exception("Cannot marshal type Day"); } public static readonly DayConverter Singleton = new DayConverter(); } internal class FromConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(From) || t == typeof(From?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); switch (value) { case "00:00": return From.The0000; case "06:00": return From.The0600; case "07:00": return From.The0700; } throw new Exception("Cannot unmarshal type From"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (From)untypedValue; switch (value) { case From.The0000: serializer.Serialize(writer, "00:00"); return; case From.The0600: serializer.Serialize(writer, "06:00"); return; case From.The0700: serializer.Serialize(writer, "07:00"); return; } throw new Exception("Cannot marshal type From"); } public static readonly FromConverter Singleton = new FromConverter(); } internal class LabelConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(Label) || t == typeof(Label?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); switch (value) { case "Dienstag": return Label.Dienstag; case "Donnerstag": return Label.Donnerstag; case "Feiertag": return Label.Feiertag; case "Freitag": return Label.Freitag; case "Mittwoch": return Label.Mittwoch; case "Montag": return Label.Montag; case "Samstag": return Label.Samstag; case "Sonntag": return Label.Sonntag; } throw new Exception("Cannot unmarshal type Label"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (Label)untypedValue; switch (value) { case Label.Dienstag: serializer.Serialize(writer, "Dienstag"); return; case Label.Donnerstag: serializer.Serialize(writer, "Donnerstag"); return; case Label.Feiertag: serializer.Serialize(writer, "Feiertag"); return; case Label.Freitag: serializer.Serialize(writer, "Freitag"); return; case Label.Mittwoch: serializer.Serialize(writer, "Mittwoch"); return; case Label.Montag: serializer.Serialize(writer, "Montag"); return; case Label.Samstag: serializer.Serialize(writer, "Samstag"); return; case Label.Sonntag: serializer.Serialize(writer, "Sonntag"); return; } throw new Exception("Cannot marshal type Label"); } public static readonly LabelConverter Singleton = new LabelConverter(); } internal class ToConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(To) || t == typeof(To?); public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; var value = serializer.Deserialize(reader); switch (value) { case "20:00": return To.The2000; case "21:00": return To.The2100; case "22:00": return To.The2200; case "24:00": return To.The2400; } throw new Exception("Cannot unmarshal type To"); } public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } var value = (To)untypedValue; switch (value) { case To.The2000: serializer.Serialize(writer, "20:00"); return; case To.The2100: serializer.Serialize(writer, "21:00"); return; case To.The2200: serializer.Serialize(writer, "22:00"); return; case To.The2400: serializer.Serialize(writer, "24:00"); return; } throw new Exception("Cannot marshal type To"); } public static readonly ToConverter Singleton = new ToConverter(); } }