如何将包含空属性名的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
相关产品推荐
相关产品推荐

