簡體   English   中英

使用 JsonConverter 將 Null 屬性設置為空字符串 - System.Text.Json

[英]Set Null Property To Empty String With JsonConverter - System.Text.Json

我一直在嘗試使用JsonSerializer和自定義JsonConverter反序列化一些null參數, JsonSerializer參數來自我看過的有關該主題的帖子的示例,但它不起作用。

當我調試NullToEmptyStringConverter它似乎跳過了我故意設置為null的空參數Version並只返回具有值的string值。 然后,當您調試反序列化對象時,它仍然是Version = null

public class NullToEmptyStringConverter : JsonConverter<string> {

    public override bool CanConvert(Type typeToConvert) {
        return typeToConvert == typeof(string);
    }

    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
        string value = reader.GetString();

        if(value == null) {
            value = "";
        }
        return value;
    }

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) {
        throw new NotImplementedException();
    }
}

我已將它添加到JsonSerializeOptions並添加了屬性。 我感到困惑的另一件事是為什么即使我將Read方法放在Version屬性之上,也會為每個參數調用它?

public class Application {

    [JsonPropertyName("version")]
    [JsonConverter(typeof(NullToEmptyStringConverter))]
    public string Version { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("description")]
    public string Description { get; set; }
}

添加到Converter

var options = new JsonSerializerOptions();
options.Converters.Add(new NullToEmptyStringConverter());

var config = JsonSerializer.Deserialize<ConfigRoot>(responseData.ToString(), options);

當我調試NullToEmptyStringConverter它似乎正在跳過 null 參數Version ...

JsonConverter<T>包含一個名為HandleNull的虛擬屬性,默認情況下為false 因此, NullToEmptyStringConverter不用於null值。 覆蓋 getter 並將其設置為返回true ,如下所示:

public override bool HandleNull => true;

...為什么即使我已將 Read 方法置於 Version 屬性之上,也會為每個參數調用它?

在您的示例中,您有以下行:

 options.Converters.Add(new NullToEmptyStringConverter());

這將NullToEmptyStringConverter注冊為全局轉換器。 由於[JsonConverter]屬性,刪除此注冊並且轉換器將僅針對Version屬性運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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