使用RestSharp获取JSON响应

18

我是C#的新手,正在尝试使用RestSharp获取REST请求的JSON响应; 我想要执行的请求是: "http://myurl.com/api/getCatalog?token=saga001"。如果我在浏览器中执行它,它可以正常工作。

我尝试过以下代码:

var client = new RestClient("http://myurl.com/api/");

var request = new RestRequest("getCatalog?token=saga001"); 

var queryResult = client.Execute(request);

Console.WriteLine(queryResult);

我得到的是"RestSharp.RestResponse",而不是我期望的JSON结果。

谢谢你的帮助!

4个回答

25

试试:

var client = new RestClient("http://myurl.com/api/");

var request = new RestRequest("getCatalog?token={token}", Method.GET); 

request.AddParameter("token", "saga001", ParameterType.UrlSegment);   

// request.AddUrlSegment("token", "saga001"); 

request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };

var queryResult = client.Execute(request);

Console.WriteLine(queryResult.Content);

我得到了相同的结果。 - Adrien Budet
我已经测试过了,结果再次相同,真的很奇怪。 - Adrien Budet
如果您调试应用程序,那么您的 queryResult RestSharp.RestReponse 对象会暴露哪些属性?我想您可以将 ContentData 属性中的任一内容写入控制台。 - chridam
2
将Content属性写入控制台是解决方案,谢谢 :) - Adrien Budet
1
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; }; 对我很有帮助。问题是响应的内容类型为 text/html。我猜 RestSharp 尝试使用 XML 反序列化。 - neutron

6

虽然这个问题比较老,但我也曾经遇到过。我找到了最简单的解决方法。

var client = new RestClient("http://myurl.com/api/");
var request = new RestRequest("getCatalog?token=saga001"); 
var response = client.Execute(request);

if (response.StatusCode == HttpStatusCode.OK)
{
    // Two ways to get the result:
    string rawResponse = response.Content;
    MyClass myClass = new JsonDeserializer().Deserialize<MyClass>(response);
}

4

可以尝试以下方式:

var client = new RestClient("http://myurl.com/api/");

client.ClearHandlers();
var jsonDeserializer = new JsonDeserializer();
client.AddHandler("application/json", jsonDeserializer);

var request = new RestRequest("getCatalog?token=saga001"); 

var queryResult = client.Execute(request);

Console.WriteLine(queryResult);

1
如果您想将结果保存到JSON文件中: 您应该使用以下命名空间:

using RestSharp;

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

var client = new RestClient("http://myurl.com/api/");
var request = new RestRequest(Method.GET);
request.AddHeader("content-type", "application/json");
var queryResult = client.Execute<Object>(request).Data;
string json = JsonConvert.SerializeObject(queryResult);
System.IO.File.WriteAllText(@"C:\...\path.json", json);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接