Создание пользовательского конвертера 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 все еще видит объект
введите описание изображения здесь
Я пытался создать преобразователь customejson для идентификатора продукта в пользовательскую сериализацию для json api
но это не сработало

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

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

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

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

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

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