Десериализация Json из читателя (Utf8JsonReader)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Десериализация Json из читателя (Utf8JsonReader)

Сообщение Anonymous »

Я вызываю JsonSerializer.Deserialize(ref Reader, options), но по какой-то причине он не работает.

Код: Выделить всё

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);
}
}
Ниже приведены типы данных, которые я использую. Идея состоит в том, что вызов JsonSerializer.Serialize(...) и JsonSerializer.Deserialize(...) самостоятельно сгенерирует оптимизированный json.

Код: Выделить всё

[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);
}
Я ожидал, что это сработает, но почему это меня не устраивает, я понятия не имею. Я прочитал документацию по использованию UTF8JsonReader, но не вижу информации о JsonSerializer.Deserialize(ref Reader). Я в некотором замешательстве.


Подробнее здесь: https://stackoverflow.com/questions/792 ... jsonreader
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Десериализация Json из читателя (Utf8JsonReader)
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Обеспечьте использование Utf8JsonReader.ValueSequence в целях тестирования.
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • System.Text.Json: десериализация JSON с автоматическим приведением
    Гость » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • .NET 8 System.Text.JSON Десериализация Json Polymorphic не работает
    Anonymous » » в форуме C#
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Десериализация Json анализирует недействительный объект Json
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»