C#反序列化JSON时如何将不存在的int属性默认赋值为null而非0
解决方案
第一步:修改属性为可空值类型
C# 中 int 属于值类型,本身不允许存储 null,默认缺省值为 0。你需要将 Result 类中对应的两个字段改为可空值类型 int?(等价于 Nullable<int>):
public class Result { // 修改为int?可空类型 public int? maxTry { get; set; } public int? minTry { get; set; } // 注意:你当前定义的aggr类型和API返回结构不匹配,API返回的aggr是字符串数组,这里需要改为List<string>,否则会反序列化失败 // public List<Details> aggr { get; set; } public List<string> aggr { get; set; } public List<string> features { get; set; } public string zone { get; set; } }
修改完成后,默认情况下 Newtonsoft.Json 反序列化时,如果 JSON 中缺失对应字段,可空值类型的属性会自动赋值为 null,无需额外配置。
可选:显式配置序列化规则
如果你全局修改过 Newtonsoft.Json 的默认序列化配置,可在反序列化时显式指定规则,确保缺失字段的可空属性赋值为 null:
var jobject = JsonConvert.DeserializeObject<Root>(res, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
也可以单独给属性加特性指定规则:
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] public int? maxTry { get; set; } [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] public int? minTry { get; set; }
内容的提问来源于stack exchange,提问作者xtc
相关产品推荐
相关产品推荐

