以下是成功創(chuàng)建新的“工作代碼”條目后從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值部分映射到屬性-我對返回給我的所有數(shù)據(jù)不感興趣:[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; }}我正在嘗試通過此調用反序列化數(shù)據(jù):newResource = JsonConvert.DeserializeObject<JobCode>(jsonResponse);其中jsonResponse是上面輸出的代碼。當我執(zhí)行代碼時,“ newResource”總是返回為空-這并不意外,因為我知道數(shù)據(jù)中實際上有多個作業(yè)代碼,并且此代碼試圖將其反序列化為單個JobCode對象。我嘗試創(chuàng)建一個名為“ 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數(shù)據(jù)時,它構造了一些看起來很奇怪的類,因此尚未證明它太有效。我已經(jīng)用幾個不同的驗證器驗證了JSON,并且都將其檢出-我只是不知道我在這里缺少什么。最終,我想從JSON數(shù)據(jù)返回一個List,但是我為實現(xiàn)該目標而感到困惑。
3 回答

楊魅力
TA貢獻1811條經(jīng)驗 獲得超6個贊
由于您無法更改JSON的方案,并且無法設置常數(shù)的屬性編號,因此建議您使用 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 關注
- 407 瀏覽
添加回答
舉報
0/150
提交
取消