ASP.NET Web API将http响应转换为json数组
发布时间:2020-05-24 04:14:51 所属栏目:asp.Net 来源:互联网
导读:调用REST URL时,我的代码工作正常: http://api.feedzilla.com/v1/categories.json 但当我调用以下URL时,我收到错误: http://api.feedzilla.com/v1/categories/15/articles.json?count=36since=2012-11-15client_source=order=relevanceti
|
调用REST URL时,我的代码工作正常:
但当我调用以下URL时,我收到错误: 错误: {"Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.IEnumerable`1[Nitin.News.DAL.Resources.Article]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.rnTo fix this error either change the JSON to a JSON array (e.g. [1,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer,not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.rnPath 'articles',line 1,position 12."}
我的守则如下: public class Article
{
public string publish_date { get; set; }
public string source { get; set; }
public string source_url { get; set; }
public string summary { get; set; }
public string title { get; set; }
public string url { get; set; }
}
public IEnumerable<Article> Get()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://api.feedzilla.com/v1/");
//Add an Accept header for JSON format.
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// call the REST method
HttpResponseMessage response = client.GetAsync("http://api.feedzilla.com/v1/categories/2/articles.json??count=36&since=2012-11-15&client_source=&order=relevance&title_only=0&").Result; // Blocking call!
if (response.IsSuccessStatusCode)
{
// Parse the response body. Blocking!
return response.Content.ReadAsAsync<IEnumerable<Article>>().Result;
//wont work
//string JSON =response.Content.ReadAsStringAsync().Result;
//return JsonConvert.DeserializeObject<IEnumerable<T>>(JSON);
}
else
{
throw new Exception(string.Format("Data access faild,{0} ({1}) method:{2}",(int)response.StatusCode,response.ReasonPhrase,MethodURL));
}
}
解决方法你的对象层次需要另一个级别…即包含IEnumerable的根.在http://json2csharp.com/运行JSON到工具会生成以下代理类: public class Enclosure
{
public int length { get; set; }
public string media_type { get; set; }
public string uri { get; set; }
}
public class Article
{
public string author { get; set; }
public string publish_date { get; set; }
public string source { get; set; }
public string source_url { get; set; }
public string summary { get; set; }
public string title { get; set; }
public string url { get; set; }
public List<Enclosure> enclosures { get; set; }
}
public class RootObject
{
public List<Article> articles { get; set; }
public string description { get; set; }
public string syndication_url { get; set; }
public string title { get; set; }
}
您只需将代码更改为: // Parse the response body. Blocking! return response.Content.ReadAsAsync<RootObject>().Result.articles; 显然剥去了你不需要的任何属性.只是想我会出于兴趣向他们展示. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何添加“必需”属性到mvc 5剃刀视图文本输
- 解决asp.net Sharepoint无法连接发布自定义字符串处理程序,
- asp.net-mvc-3 – 在Asp.net MVC中为optgroup功能使用Helpe
- asp.net-web-api – ASP.NET WebApi测试 – 断言请求返回40
- asp.net-mvc – 如何将MEF与ASP.NET MVC 4和ASP.NET Web AP
- asp.net – 错误:“配置部分’system.webServer/managemen
- asp.net-mvc – “无法同时分析32位和64位应用程序”错误
- asp.net – Web API中的每路径格式化程序配置
- asp.net-mvc – 为什么这个MVC路由不起作用?
- asp.net-mvc – ASP.NET MVC:访问集合中项目的ModelMetada
推荐文章
站长推荐
- asp.net-mvc – 在ASP.NET MVC 4中的用户控制等效
- ASP.NET ViewState的工作原理
- Asp.net 实现Session分布式储存(Redis,Mongodb,M
- 用于Asp.Net应用程序的SSO的最佳方法,从具有多个
- asp.net – ASPxComboBox,如何设置所选项?
- asp.net-mvc – mvc中的多个内容占位符?
- asp.net – 添加context.Response.Headers.Add(“
- ASP.NET MVC 3数据注释:动态添加验证
- ASP.NET 2.5前缀ctl00和ASP.NET 4不是前缀ctl00
- asp.net-mvc – 断言操作重定向到正确的操作/路由
热点阅读
