vue前後端分離項目中,對於空字符串轉可空類型出錯的解決辦法

環境:netcore  6.0+

序列化採用自帶的 System.Text.Json工具

使用vue做前後端分離時,我們提交的對象中,可能有些字段是爲空字符串,但是對應接口要求是int? ,decimal? datetime?等類型。
那麼在序列化時,就會報錯。

因爲空字符串無法直接反序列化爲 null

 

所以我們需要自定義一個轉換規則:

 public class NullableConverter<T> : JsonConverter<T?> where T : struct
    {

        public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            if (reader.TokenType == JsonTokenType.String)
            {
                if (string.IsNullOrEmpty(reader.GetString()) || string.IsNullOrWhiteSpace(reader.GetString()))
                {
                    return null;
                }
            }
            return JsonSerializer.Deserialize<T>(ref reader, options);
        }


        public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options)
        {
            JsonSerializer.Serialize(writer, value!.Value, options);
        }

    }

然後注入到services中

            services.AddControllersWithViews(options =>
            {
            }).AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Converters.Add(new KJXX.Models.NullableConverter<int>());
                options.JsonSerializerOptions.Converters.Add(new KJXX.Models.NullableConverter<decimal>());
                options.JsonSerializerOptions.Converters.Add(new KJXX.Models.NullableConverter<DateTime>());

            });

有多少個類型,都需要增加對飲的option注入。

 

這樣就能解決了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章