簡體   English   中英

未調用可空值類型的自定義 Json 轉換器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM