using Newtonsoft.Json.Linq;
public static void Main()
Console.WriteLine("--- Version 1 ---");
""timezone"": ""Europe/Rome"",
var forecast = JsonConvert.DeserializeObject<Forecast>(json);
Console.WriteLine("\n--- Version 2 ---");
""timezone"": ""Europe/Rome"",
forecast = JsonConvert.DeserializeObject<Forecast>(json);
static void DumpForecast(Forecast forecast)
Console.WriteLine("Latitude: " + forecast.Latitude);
Console.WriteLine("Longitude: " + forecast.Longitude);
Console.WriteLine("Time Zone: " + forecast.TimeZone);
Console.WriteLine("Min Temp: " + forecast.Temperature.Min);
Console.WriteLine("Max Temp: " + forecast.Temperature.Max);
Console.WriteLine("Avg Temp: " + forecast.Temperature.Avg);
public double Latitude { get; set; }
public double Longitude { get; set; }
public double? Avg { get; set; }
public double? Min { get; set; }
public double? Max { get; set; }
private Coordinates _coord = new Coordinates();
set => _coord.Latitude = value;
set => _coord.Longitude = value;
[JsonProperty("timezone")]
public string TimeZone { get; set; }
[JsonProperty("temperature"), JsonConverter(typeof(MyTemperatureConverter))]
public Temperature Temperature { get; set; } = new Temperature();
public class MyTemperatureConverter : JsonConverter
public override bool CanConvert(Type objectType)
return objectType == typeof(Temperature);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
Temperature temp = new Temperature();
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Object)
temp.Min = (double?)token["min"];
temp.Max = (double?)token["max"];
temp.Avg = (double?)token;
public override bool CanWrite => false;
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();