You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反序列化JSON时如何将null的Article属性自动设为默认空字符串?

解决JSON反序列化时null字段自动转为空字符串的问题

问题场景

给定JSON数据:

[{"Familiy":"A","Article":null}, {"Familiy":"B","Article":"plant"}]

需反序列化为ObservableCollection<ArticleModel>,模型类定义:

public class ArticleModel
{
    public string Familiy { get; set; }
    public string Article { get; set; }
}

当前使用Newtonsoft.Json的反序列化代码:

var settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore,
};

ObservableCollection<ArticleModel> result = JsonConvert.DeserializeObject<ObservableCollection<ArticleModel>>(jsonString, settings);

遇到的问题:外部接口返回的Article字段为null时,反序列化后该属性仍为null,导致UI绑定失败,需要自动将null转为空字符串。此前尝试的默认值特性、构造函数初始化、切换System.Text.Json均未解决。


可行解决方案

方案1:修改模型属性的Getter(最简单直接)

直接在模型属性的Getter中处理null值,无论使用哪种JSON库都能生效:

public class ArticleModel
{
    private string _article;
    public string Familiy { get; set; }
    
    public string Article 
    { 
        get => _article ?? string.Empty; 
        set => _article = value; 
    }
}

方案2:Newtonsoft.Json自定义转换器

创建专门处理字符串null转空的转换器:

public class NullToEmptyStringConverter : JsonConverter<string>
{
    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        return reader.Value?.ToString() ?? string.Empty;
    }

    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        writer.WriteValue(value ?? string.Empty);
    }
}

使用方式二选一:

  • 全局配置转换器:
    var settings = new JsonSerializerSettings
    {
        Converters = new List<JsonConverter> { new NullToEmptyStringConverter() }
    };
    var result = JsonConvert.DeserializeObject<ObservableCollection<ArticleModel>>(jsonString, settings);
    
  • 给单个属性标注特性:
    public class ArticleModel
    {
        public string Familiy { get; set; }
        [JsonConverter(typeof(NullToEmptyStringConverter))]
        public string Article { get; set; }
    }
    

方案3:System.Text.Json自定义转换器

若使用System.Text.Json,创建对应转换器:

public class NullToEmptyStringConverter : JsonConverter<string>
{
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        return reader.TokenType == JsonTokenType.Null ? string.Empty : reader.GetString() ?? string.Empty;
    }

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value ?? string.Empty);
    }
}

配置并使用:

var options = new JsonSerializerOptions
{
    Converters = { new NullToEmptyStringConverter() }
};
var result = JsonSerializer.Deserialize<ObservableCollection<ArticleModel>>(jsonString, options);

内容的提问来源于stack exchange,提问作者galex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:07:14