Код: Выделить всё
public class WeatherForecastJsonConverter : JsonConverter
{
public override WeatherForecast? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// Returns an empty WeatherForecastData
var data = JsonSerializer.Deserialize(ref reader, options);
return new WeatherForecast
{
Date = data.Date,
TemperatureCelsius = data.TC,
Summary = data.Summary == 1 ? "Hot" : data.Summary == -1 ? "Cold" : string.Empty,
};
}
public override void Write(Utf8JsonWriter writer, WeatherForecast value, JsonSerializerOptions options)
{
var data = new WeatherForecastData(value.Date, value.TemperatureCelsius, value.Summary ?? string.Empty);
JsonSerializer.Serialize(writer, data, options);
}
}
Код: Выделить всё
[JsonConverter(typeof(WeatherForecastJsonConverter))]
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureCelsius { get; set; }
public string? Summary { get; set; }
}
internal readonly struct WeatherForecastData
{
public DateTime Date { get; }
public int TC { get; }
public int Summary { get; }
public WeatherForecastData(DateTime date, int temperatureCelsius, string summary)
{
this.Date = date;
this.TC = temperatureCelsius;
this.Summary = summary == "Hot" ? 1 : summary == "Cold" ? -1 : 0;
}
}
Код: Выделить всё
// This works
[Fact]
public void TestSerialize()
{
var weatherForecast = new WeatherForecast
{
Date = System.DateTime.Parse("1731-02-08T00:00:00"),
TemperatureCelsius = 2,
Summary = "Cold"
};
var json = JsonSerializer.Serialize(weatherForecast);
}
// This doesn't
[Fact]
public void TestDeserialize()
{
var json = "{\"Date\":\"2019-08-01T00:00:00\",\"TC\":25,\"Summary\":1}";
var weatherForecast = JsonSerializer.Deserialize(json);
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... jsonreader