C#用Newtonsoft反序列化JSON时数字类名属性名不合法如何解决
解决方案
你可以使用Newtonsoft.Json内置的JsonProperty特性绕过C#命名规范限制:该特性可以手动指定C#属性与JSON键名的映射关系,你只需要将C#类、属性命名为符合规范的名称,再通过特性绑定对应JSON的数字键名即可。
正确的类定义示例
首先引入Newtonsoft.Json命名空间:
using Newtonsoft.Json;
编写符合C#命名规范的映射类:
// 原非法名称为2的类可自定义合法名称,此处命名为SprintDetail public class SprintDetail { public int id { get; set; } public string name { get; set; } public string state { get; set; } public int boardId { get; set; } } public class Customfield10323 { // 绑定JSON中键为"1"的属性 [JsonProperty("1")] public List<string> SprintRawEntries { get; set; } // 绑定JSON中键为"2"的属性 [JsonProperty("2")] public List<SprintDetail> SprintStructuredEntries { get; set; } } public class Root { public Customfield10323 customfield_10323 { get; set; } }
反序列化用法
直接按正常流程调用反序列化方法即可,Newtonsoft会自动按照JsonProperty指定的键名做匹配:
var result = JsonConvert.DeserializeObject<Root>(你的JSON字符串);
扩展说明
如果后续接口返回的数字键是动态不固定的,你也可以用字典类型接收该层级的内容,无需提前定义所有键:
public class Customfield10323 { // 键为JSON的数字属性名,值为对应的内容 public Dictionary<string, object> DynamicFields { get; set; } }
内容的提问来源于stack exchange,提问作者hlh3406
相关产品推荐
相关产品推荐

