[英]Custom Json Converter For Nullable Value Type Does Not Get Called
我有兩個用於 Uuid 值類型的自定義轉換器。 一個用於可為空,另一個用於不可為空:
public class NullableUuidJsonConverter : JsonConverter<Uuid?>
{
public override bool HandleNull => true;
public override Uuid? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (Uuid.TryParse(reader.GetString(), out var parsedUuid))
{
return parsedUuid;
}
return null;
}
public override void Write(Utf8JsonWriter writer, Uuid? value, JsonSerializerOptions options)
{
if (value == null)
{
writer.WriteStringValue((string)null);
}
else
{
writer.WriteStringValue(value.Value.ToString());
}
}
}
public class UuidJsonConverter : JsonConverter<Uuid>
{
public override Uuid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return new Uuid(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, Uuid value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
他們是這樣注冊的:
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Insert(0, new UuidJsonConverter());
options.JsonSerializerOptions.Converters.Insert(1, new NullableUuidJsonConverter());
});
當我嘗試調用請求 model 包含可為空的 Uuid 的 API 方法時:
[PublicAPI]
public class Request : IRequest<Response>
{
[FromQuery(Name = "ids")] public Uuid[] CheckupIds { get; set; }
[FromQuery(Name = "unitId")][CanBeNull] public Uuid? UnitId { get; set; }
[FromQuery(Name = "ratingPeriodId")][CanBeNull] public Uuid? RatingPeriodId { get; set; }
}
UnitId 和 RatingPeriodId 填入 null。 但是,如果我使它們變得簡單,不可為空的 Uuid,它們將被實際傳遞的值填充。
謝謝你的回復。 我設法通過使用公開可用的 nuget Dodo.Primitives.Uuid 解決了這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.