以下是成功创建新的“工作代码”条目后从REST API获得的(略)简化的响应。我需要将响应反序列化为某些类,但是我很困惑。作为参考,我在.NET 3.5(在SQL Server 2008 R2中的SSIS脚本中运行)中使用JSON.NET尝试反序列化。这是JSON-我显然无法控制它,因为它来自其他人的API:{ "results":{ "jobcodes":{ "1":{ "_status_code":200, "_status_message":"Created", "id":444444444, "assigned_to_all":false, "billable":true, "active":true, "type":"regular", "name":"1234 Main Street - Jackson" }, "2":{ "_status_code":200, "_status_message":"Created", "id":1234567890, "assigned_to_all":false, "billable":true, "active":true, "type":"regular", "name":"4321 Some Other Street - Jackson" } } }}在我的C#代码中,我确实定义了一个“ JobCode”类,该类仅将JSON值部分映射到属性-我对返回给我的所有数据不感兴趣:[JsonObject]class JobCode{ [JsonProperty("_status_code")] public string StatusCode { get; set; } [JsonProperty("_status_message")] public string StatusMessage { get; set; } [JsonProperty("id")] public string Id {get; set;} [JsonProperty("name")] public string Name { get; set; }}我正在尝试通过此调用反序列化数据:newResource = JsonConvert.DeserializeObject<JobCode>(jsonResponse);其中jsonResponse是上面输出的代码。当我执行代码时,“ newResource”总是返回为空-这并不意外,因为我知道数据中实际上有多个作业代码,并且此代码试图将其反序列化为单个JobCode对象。我尝试创建一个名为“ JobCodes”的新类,如下所示:class JobCodes{ [JsonProperty("jobcodes")] public List<JobCode>_JobCodes { get; set; }}然后我尝试调用此命令:newResource = JsonConvert.DeserializeObject<JobCodes>(jsonResponse);但是问题仍然存在-我的返回对象为null。我认为让我失望的是标识符“ 1”和“ 2”的存在。我不知道如何在我的对象设计和/或JSON.NET类/属性属性(例如[JsonObject],[JsonProperty]等)的使用中考虑它们的存在。当我通过JSON2CSharp运行JSON数据时,它构造了一些看起来很奇怪的类,因此尚未证明它太有效。我已经用几个不同的验证器验证了JSON,并且都将其检出-我只是不知道我在这里缺少什么。最终,我想从JSON数据返回一个List,但是我为实现该目标而感到困惑。
3 回答

杨魅力
TA贡献1811条经验 获得超6个赞
由于您无法更改JSON的方案,并且无法设置常数的属性编号,因此建议您使用 JObject
var jobject = JObject.Parse(json);
var results = jobject["results"];
var jobcodes = results["jobcodes"];
var output = jobcodes.Children<JProperty>()
.Select(prop => prop.Value.ToObject<JobCode>())
.ToList();
警告:代码假定JSON始终处于正确的架构中。您还应该处理无效的架构(例如,属性不是JobCodescheme的地方)。
- 3 回答
- 0 关注
- 396 浏览
添加回答
举报
0/150
提交
取消