【发布时间】:2016-11-14 17:53:38
【问题描述】:
对于可能令人困惑的标题,我们深表歉意。我是 JSON 新手,我正在使用一个与 API 接口的软件开发一个 Web 应用程序。我可以控制两者。
我的应用程序需要枚举“客户”及其“项目”的列表。目前它返回以下内容:
{
"clients": [
{
"client_id": "1",
"client_name": "Client1",
"projects": [
{
"client_project_id": "1",
"client_project_title": "WidgetsA",
"client_project_client": "1",
"client_project_status": "1"
},
{
"client_project_id": "11",
"client_project_title": "WidgetsB",
"client_project_client": "1",
"client_project_status": "1"
}
]
},
{
"client_id": "11",
"client_name": "Client11",
"projects": [
{
"client_project_id": "31",
"client_project_title": "Install",
"client_project_client": "11",
"client_project_status": "1"
}
]
},
{
"client_id": "21",
"client_name": "Client21",
"projects": [
{
"client_project_id": "61",
"client_project_title": "Marketing",
"client_project_client": "21",
"client_project_status": "1"
}
]
},
{
"client_id": "31",
"client_name": "Client31",
"projects": [
{
"client_project_id": "71",
"client_project_title": "Fire Everyone",
"client_project_client": "31",
"client_project_status": "1"
},
{
"client_project_id": "81",
"client_project_title": "Buy A Company",
"client_project_client": "31",
"client_project_status": "1"
}
]
}
]
}
我可以使用以下 JSON.NET 代码轻松地将其反序列化为一个对象:
MyObject result = JsonConvert.DeserializeObject<MyObject>(response);
但是,这只适用于我的对象如下所示:
[Serializable, JsonObject]
internal class MyObject
{
[JsonProperty("clients")]
internal List<ClientObject> ClientList = new List<ClientList>();
}
internal class ClientObject
{
[JsonProperty("client_id")]internal string ClientID { get; set; }
[JsonProperty("client_name")] internal string ClientName { get; set; }
[JsonProperty("projects")] internal List<ProjectObject> ProjectList = new List<ProjectObject>();
}
(注意:出于隐私考虑,我更改了很多属性和对象的名称,如有任何错误,敬请见谅)
我真正想做的是使用以下代码:
List<ClientObject> result = JsonConvert.DeserializeObject<List<ClientObject>>(response);
但无论我如何格式化 JSON 响应,JSON.NET 都会抛出一个错误,指出 JSON 不是数组。谁能告诉我哪里出错了,或者我误解了什么?
【问题讨论】:
-
的json字符串不是数组。
-
您的 json 格式是“对象”格式 -
{"clientList": [ {client1properties}, {client2properties}] }。您需要将返回的 json 更改为集合格式[{client1properties}, {client2properties}]