Error: Newtonsoft.Json.JsonSerializationException
Error: Newtonsoft.Json.JsonSerializationException
您好,我正在学习使用Refit,遇到问题
这些是模型
public partial class Source
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
public partial class Article
{
[JsonProperty("source")]
public Source Source { get; set; }
[JsonProperty("author")]
public string Author { get; set; }
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("url")]
public Uri Url { get; set; }
[JsonProperty("urlToImage")]
public Uri UrlToImage { get; set; }
[JsonProperty("publishedAt")]
public DateTimeOffset PublishedAt { get; set; }
[JsonProperty("content")]
public string Content { get; set; }
}
这是请求及其参数的接口。
public interface IRest
{
[Get("/v2/top-headlines")]
Task<List<Article>> GetArticles(string country, string apiKey"RemovingKey");
}
这是 ArticleViewModel 中的请求
private async Task GetTaskAsync()
{
var WeApp = RestService.For<IRest>("https://newsapi.org/");
var result = await WeApp.GetArticles("co");
}
当我调试查看数据时出现
Newtonsoft.Json.JsonSerializationException
Message=Cannot deserialize the current JSON object (e.g. {"name":"value"})
into type 'System.Collections.Generic.List`1[RefitNpt.Models.Article]'
because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array
(e.g. [1,2,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.
Path 'status', line 1, position 10.
我一直在寻找解决方案,但一直无法解决,我正在自学。
您需要另一个 class 作为您的 json 响应的 RootObject。
public class Articles
{
public string status {get; set;}
public int totalResults {get;set;}
public List<Article> articles {get;set; }
}
然后在您的 IRest 控制器中使用它,(您需要将您的方法 (GetArticles
) 更新为 return Articles
而不是 List<Article>
。
Task<Articles> GetArticles(string country, string apiKey);
此回复与来自网站 https://newsapi.org
的以下 json 片段一致
{
"status": "ok",
"totalResults": 3152,
"articles": [
{
"source": {
"id": null,
"name": "Business 2 Community"
},
"author": "Gurbaj Singh",
"title": "Investing in Cryptocurrency? What are the Odds!?",
"description": "Cryptocurrency has become the most profitable object for investing money. At the same time, in comparison with precious metals, natural…",
"url": "https://www.business2community.com/finance/investing-in-cryptocurrency-what-are-the-odds-02326876",
"urlToImage": "https://cdn.business2community.com/wp-content/uploads/2020/07/Untitled-design-3.png",
"publishedAt": "2020-07-13T15:30:31Z",
"content": "Cryptocurrency has become the most profitable object for investing money. At the same time, in comparison with precious metals, natural resources, or real estate, virtual coins involve more risks ass… [+9899 chars]"
},
// More Articles here...
]
}
您好,我正在学习使用Refit,遇到问题
这些是模型
public partial class Source
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
public partial class Article
{
[JsonProperty("source")]
public Source Source { get; set; }
[JsonProperty("author")]
public string Author { get; set; }
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("url")]
public Uri Url { get; set; }
[JsonProperty("urlToImage")]
public Uri UrlToImage { get; set; }
[JsonProperty("publishedAt")]
public DateTimeOffset PublishedAt { get; set; }
[JsonProperty("content")]
public string Content { get; set; }
}
这是请求及其参数的接口。
public interface IRest
{
[Get("/v2/top-headlines")]
Task<List<Article>> GetArticles(string country, string apiKey"RemovingKey");
}
这是 ArticleViewModel 中的请求
private async Task GetTaskAsync()
{
var WeApp = RestService.For<IRest>("https://newsapi.org/");
var result = await WeApp.GetArticles("co");
}
当我调试查看数据时出现
Newtonsoft.Json.JsonSerializationException
Message=Cannot deserialize the current JSON object (e.g. {"name":"value"})
into type 'System.Collections.Generic.List`1[RefitNpt.Models.Article]'
because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array
(e.g. [1,2,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.
Path 'status', line 1, position 10.
我一直在寻找解决方案,但一直无法解决,我正在自学。
您需要另一个 class 作为您的 json 响应的 RootObject。
public class Articles
{
public string status {get; set;}
public int totalResults {get;set;}
public List<Article> articles {get;set; }
}
然后在您的 IRest 控制器中使用它,(您需要将您的方法 (GetArticles
) 更新为 return Articles
而不是 List<Article>
。
Task<Articles> GetArticles(string country, string apiKey);
此回复与来自网站 https://newsapi.org
{
"status": "ok",
"totalResults": 3152,
"articles": [
{
"source": {
"id": null,
"name": "Business 2 Community"
},
"author": "Gurbaj Singh",
"title": "Investing in Cryptocurrency? What are the Odds!?",
"description": "Cryptocurrency has become the most profitable object for investing money. At the same time, in comparison with precious metals, natural…",
"url": "https://www.business2community.com/finance/investing-in-cryptocurrency-what-are-the-odds-02326876",
"urlToImage": "https://cdn.business2community.com/wp-content/uploads/2020/07/Untitled-design-3.png",
"publishedAt": "2020-07-13T15:30:31Z",
"content": "Cryptocurrency has become the most profitable object for investing money. At the same time, in comparison with precious metals, natural resources, or real estate, virtual coins involve more risks ass… [+9899 chars]"
},
// More Articles here...
]
}