我在JSON中提供了以下示例响应。我希望能够将其转换为C#DataTable,以便我可以遍历元素并从那里进行编程。
{
"totalItems" : 10,
"pageSize" : 20,
"page" : 1,
"items" : [ {
"type" : "call",
"uri" : "http://link.com",
"created" : "2014-07-28T10:02:48.000+0000",
"callType" : "external",
"from" : "01234567891",
"to" : "01234567892",
"callId" : "ast01-1406541749.604847",
"links" : {
"recordings" : "http://link.com"
}
}, {
"type" : "call",
"uri" : "http://link.com"
"created" : "2014-07-22T15:21:02.000+0000",
"callType" : "external",
"from" : "01234567895",
"to" : "01234567898",
"callId" : "ast02-1406042397.63768",
"links" : {
"recordings" : "http://link.com"
}
} ],
"nextPage" : "http://link.com"
}
我正在使用JSON.net。问题是当我使用以下方法转换为DataTable时:
DataTable items = JsonConvert.DeserializeObject<DataTable>(jsonString);
调试器返回..
“读取DataTable时出现意外的JSON令牌:StartObject”
有任何想法吗?
正如LB建议的那样,您需要创建自定义类,然后将发布的JSON反序列化到其中,而不是DataTable
。原因很简单:要将JSON字符串反序列化为DataTable
JSON字符串,必须遵循某种特定格式。作为DataTable
代表的行和列的JSON字符串必须代表一个集合(JavaScript数组)的集合。JSON字符串中的所有嵌套对象也必须是javascript数组的一部分,因为内置的DataTableConverter
(当您尝试反序列化JSON以进行DataTable
键入时使用)将无法反序列化JSON字符串。您收到的异常是由于以下行:
"links" : {
"recordings" : "http://link.com"
}
如果您将其更改为
"links": [{
"recordings": "http://link.com"
}]
您将更进一步,可以正确地反序列化到DataTable
。
下一步是使整个JSON字符串成为javascript数组。像这样的东西:
[{
"totalItems": 10,
"pageSize": 20,
"page": 1,
"items": [
{
"type": "call",
"uri": "http://link.com",
"created": "2014-07-28T10:02:48.000+0000",
"callType": "external",
"from": "01234567891",
"to": "01234567892",
"callId": "ast01-1406541749.604847",
"links": [{
"recordings": "http://link.com"
}]
},
{
"type": "call",
"uri": "http://link.com",
"created": "2014-07-22T15:21:02.000+0000",
"callType": "external",
"from": "01234567895",
"to": "01234567898",
"callId": "ast02-1406042397.63768",
"links": [{
"recordings": "http://link.com"
}]
}
],
"nextPage": "http://link.com"
}]
之后,您可以DataTable
使用以下行将其反序列化为:
DataTable items = JsonConvert.DeserializeObject<DataTable>(jsonString);
如果不能更改JSON字符串,则必须按照LB的建议将JSON反序列化为自定义类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句