以下是我从REST API接收到的成功创建新的“工作代码”条目的(轻微)剥离响应。 我需要将响应反序列化成一些类,但我被难住了。
供参考,我在.NET 3.5中使用JSON.NET(在SQL Server 2008 R2中运行的SSIS脚本中)尝试我的反序列化。 这是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值映射到属性 - 我对返回给我的所有数据都不感兴趣:在我的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; }
//-------------------------------------------------------------------------------
// Empty constructor for JSON serialization support
//-------------------------------------------------------------------------------
public JobCode() { }
}
我正在尝试通过以下调用对数据进行反序列化:
newResource = JsonConvert.DeserializeObject<JobCode>(jsonResponse);
当执行上述代码时,"jsonResponse"是所输出的代码。
但是每次我执行代码时,"newResource"总是返回null - 这并不出乎意料,因为我知道数据中实际上有多个工作代码,而此代码正试图将其反序列化为单个JobCode对象。我尝试创建一个名为"JobCodes"的新类,它看起来像这样:
class JobCodes
{
[JsonProperty("jobcodes")]
public List<JobCode>_JobCodes { get; set; }
}
然后我尝试着调用这个:
newResource = JsonConvert.DeserializeObject<JobCodes>(jsonResponse);
但问题仍然存在——我的返回对象为空。 我认为让我困惑的是“1”和“2”标识符的存在。我不知道如何在我的对象设计和/或使用JSON.NET类/属性特性(如[JsonObject],[JsonProperty]等)中考虑它们的存在。
当我将JSON数据通过JSON2CSharp运行时,它构造出一些看起来很奇怪的类,所以那并没有证明太有效。我已经使用几个不同的验证器验证过JSON,它们都检查通过了——我只是不知道我漏掉了什么。
最终,我想从JSON数据返回一个列表,但我被卡住了,不知道该怎么做才能实现。
var newResource = JsonConvert.DeserializeObject<List<JobCode>>(jsonResponse);//?
。 - aleresults
和jobcodes
应该是一个集合。在你的情况下它们不是。这种情况下,你应该准备另一个类,其包含映射到JobCode
类型的1
和2
属性。然后再准备另一个类,其中包含先前构建的类类型的jobcodes
属性。 - user2160375