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

如何将包含空属性名的JSON字符串DeserializeObject为C#对象

C# 反序列化包含空属性名JSON的实现方案

你遇到的JSON结构本质是键为字符串、值为字符串数组的键值对集合,空字符串作为键在主流C#序列化库中都有原生支持,两种常用实现方案如下:

方案1:用字典类型接收(推荐,适配未知字段场景)

直接反序列化为Dictionary<string, List<string>>即可,空字符串会被自动识别为合法的字典Key:

Newtonsoft.Json(Json.NET) 实现

using Newtonsoft.Json;

// 空属性名JSON反序列化
string jsonWithEmptyKey = @"{""":[""Waybill already exist""]}";
var result1 = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(jsonWithEmptyKey);
// 取空键对应的错误信息:var commonErrors = result1[""];

// 常规属性名JSON反序列化
string jsonWithNormalKey = @"{""RecevierAddress1"" : [""Receiver address 1 can not be blank""]}";
var result2 = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(jsonWithNormalKey);
// 取指定键对应的错误信息:var addressErrors = result2["RecevierAddress1"];

System.Text.Json 实现

using System.Text.Json;

var result1 = JsonSerializer.Deserialize<Dictionary<string, List<string>>>(jsonWithEmptyKey);
var result2 = JsonSerializer.Deserialize<Dictionary<string, List<string>>>(jsonWithNormalKey);

方案2:强类型对象接收(适配字段固定场景)

如果返回的字段是固定的,仅部分场景会出现空键,可以通过属性标注实现映射:

Newtonsoft.Json 实现

public class ValidationResult
{
    [JsonProperty("")]
    public List<string> CommonErrors { get; set; }
    
    public List<string> RecevierAddress1 { get; set; }
    // 其他可能返回的字段按名称补充即可
}

// 反序列化调用
var result = JsonConvert.DeserializeObject<ValidationResult>(json);

System.Text.Json 实现

public class ValidationResult
{
    [JsonPropertyName("")]
    public List<string> CommonErrors { get; set; }
    
    public List<string> RecevierAddress1 { get; set; }
}

// 反序列化调用
var result = JsonSerializer.Deserialize<ValidationResult>(json);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:36:03