Создание пользовательского конвертера Json для строгого идентификатора типаC#

Место общения программистов C#
Anonymous
Создание пользовательского конвертера Json для строгого идентификатора типа

Сообщение Anonymous »

Я пытался создать собственный преобразователь JSON для ProductId, но преобразование не применимо к пользовательскому интерфейсу Swagger. Он по-прежнему видит ProductId как id: {value: . Я хочу, чтобы он видел только значение GUID, как показано в коде.

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

public class ProductIdJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
if (value is ProductId id)
{
serializer.Serialize(writer, id.value);
}
else
{
writer.WriteNull();
}
}

public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
{
var guid = serializer.Deserialize(reader);
return ProductId.Create(guid);
}

public override bool CanConvert(Type objectType)
{
return objectType == typeof(ProductId);
}
}
Идентификатор продукта

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

[EfCoreValueConverter(typeof(ProductConverter.ProductIdValueConverter))]
[JsonConverter(typeof(ProductConverter.ProductIdJsonConverter))]
[TypeConverter(typeof(ProductConverter.ProductIdTypeConverter))]
public sealed class ProductId : ValueObjectId,IValueObjectId
{
public ProductId(Guid id) : base(id)
{
}

public static ProductId Create(Guid id)
{
return new ProductId(id);
}

public static ProductId CreateUnique()
{
return new(Guid.NewGuid());
}
}
ValueObjectId

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

public abstract class ValueObjectId : ValueObject
{
public Guid value { get;  set; }

protected ValueObjectId(Guid id)
{
value = id;
}

public override IEnumerable GetEqualityComponents()
{
yield return value;
}
}
Я зарегистрировал этот конвертер JSON:

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

builder.Services.AddControllers()
.AddNewtonsoftJson(op =>
{
op.SerializerSettings.Converters.Add(new ProductConverter.ProductIdJsonConverter());
});
Но Swagger все равно видит объект:
введите здесь описание изображения
Я пытался создать собственный Конвертер JSON для ProductId, чтобы получить пользовательскую сериализацию для JSON API, но это не сработало.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-type-id

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