JsonConverter.Write не вызываетсяC#

Место общения программистов C#
Anonymous
JsonConverter.Write не вызывается

Сообщение Anonymous »


TL;DR Я настроил JsonConverter для типа в моем приложении ASP.NET Core, и хотя метод Read правильно вызывается, когда при получении данных метод Write не вызывается при записи данных.

Я создал JsonConverter для пользовательского тип, который я разработал (реализация шаблона перечисления):

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

class MyEnum
{
private MyEnum(int code, string description)
{
Code = code;
Description = description;
}

public int Code { get; private set; }
public string Description { get; private set; }

public static MyEnum First = new(1, "First");
public static MyEnum Second = new(2, "Second");

public static Parse(string description) => description switch
{
"First" => MyEnum.First,
"Second" => MyEnum.Second,
}

public override string ToString() => Description;
}
Конвертер прост и похож на приведенный ниже код:

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

public class MyEnumConverter : JsonConverter
{
public override T? Read(ref Utf8JsonReader reader, Type _, JsonSerializerOptions _) => MyEnum.Parse(reader.GetString());

public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions _)
=> writer.WriteStringValue(value.ToString());
}
И настроил ASP.NET Core для использования этого конвертера:

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

builder.Services
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(
new MyEnumConverter());
});
Удивительно, при тестировании контроллера, который возвращает этот тип, я получаю Json с сериализованным всем классом, что-то вроде:

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

{ "code": 1, "description": "First" }
Однако при получении запроса метод Read вызывается правильно!
Это кстати, сигнатура метода контроллера:

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

public class Dto { public MyEnum Foo { get; set; } }

public async Task Create(
[FromBody] Dto dto);
Есть идеи, почему это могло произойти?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ing-called

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