C# 使用JsonConvert反序列化JSON部分字段为空如何解决
反序列化失败问题解决方案
导致字段赋值失败的核心问题一共有3处,修正后即可正常反序列化所有字段:
JsonProperty注解配置的属性名与实际JSON字段不匹配:你提供的JSON示例中对应字段为BError、AStatus,但注解里写的是B-Error、A-Status,字段名不一致导致Newtonsoft.Json无法匹配赋值- 类成员定义存在拼写错误:
Demo类中Name属性的访问修饰符错写为pulic,正确应为public,语法错误会影响序列化赋值逻辑 - 反序列化步骤冗余且存在风险:先将JSON反序列化为object再转字符串二次反序列化的操作没有必要,多步转换可能导致字段丢失
修正后的代码
实体类定义
public class Demo { [JsonProperty("Date")] public DateTime? Date { get; set; } // 修正拼写错误 public string Name { get; set; } // 修正JsonProperty值与JSON字段匹配 [JsonProperty("BError")] public BError BError { get; set; } // 修正JsonProperty值与JSON字段匹配 [JsonProperty("AStatus")] public bool AStatus { get; set; } } public class BError { public string code { get; set; } public string details { get; set; } }
反序列化代码
// 直接一步反序列化即可,无需多余转换 Demo d = JsonConvert.DeserializeObject<Demo>(input_JSON_string);
补充说明:如果你的实际业务返回的JSON字段确实是带横杠的
B-Error和A-Status,则是你提供的JSON示例有误,此时不需要修改JsonProperty注解,只需要修正Name的拼写错误+优化反序列化步骤即可正常赋值。
内容的提问来源于stack exchange,提问作者Lokesh Jinka
相关产品推荐
相关产品推荐

