如何使用 System.Text.Json 反序列化来自 RestSharp 的响应?
How to Deserialize response from RestSharp using System.Text.Json?
我正在尝试使用 RestSharp 编写简单的 Get 操作并尝试使用 System.Test.Json 反序列化响应。
我的测试方法如下,
[Test]
public void Test1()
{
var restClient = new RestClient("http://localhost:3333/");
var request = new RestRequest("posts/{postid}", Method.Get);
request.AddUrlSegment("postid", 1);
var response = restClient.ExecuteGetAsync(request).GetAwaiter().GetResult();
var deserial = JsonSerializer.Deserialize<Posts>(response);
}
Posts模型class如下,
public class Posts
{
public string id { get; set; }
public string title { get; set; }
public string author { get; set; }
}
但我在行“var deserial = JsonSerializer.Deserialize(response);”
中收到强制错误
无法从 'RestSharp.RestResponse' 转换为 'System.Text.Json.JsonDocument' NUnitAPIPractice
如果我改成
var deserial = JsonSerializer.Deserialize<Posts>(response).ToSring();
然后编译问题就解决了,但是在我执行代码之后我得到了
System.Text.Json.JsonException : 'R' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
----> System.Text.Json.JsonReaderException : 'R' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
Stack Trace:
ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex)
请告诉我是否必须使用特殊的 JSON 转换将 RestSharp 响应转换为 JSON 才能解决此问题?谢谢
您正在尝试反序列化整个 RESTSharp 响应对象,而不仅仅是它的 json 内容。
响应内容的字符串表示形式在响应变量的 Content 属性 中可用,请尝试反序列化它:
var deserial = JsonSerializer.Deserialize<Posts>(response.Content);
查看 restsharp 源代码,第 56 行:
https://github.com/restsharp/RestSharp/blob/dev/src/RestSharp/Response/RestResponseBase.cs
RestSharp 将为您反序列化它。
var response = await restClient.ExecuteGetAsync<Posts>(request);
var deserialized = response.Data;
或者
var deserialized = await restClient.GetAsync<Posts>(request);
参考 documentation 总是一个好主意。
我正在尝试使用 RestSharp 编写简单的 Get 操作并尝试使用 System.Test.Json 反序列化响应。
我的测试方法如下,
[Test]
public void Test1()
{
var restClient = new RestClient("http://localhost:3333/");
var request = new RestRequest("posts/{postid}", Method.Get);
request.AddUrlSegment("postid", 1);
var response = restClient.ExecuteGetAsync(request).GetAwaiter().GetResult();
var deserial = JsonSerializer.Deserialize<Posts>(response);
}
Posts模型class如下,
public class Posts
{
public string id { get; set; }
public string title { get; set; }
public string author { get; set; }
}
但我在行“var deserial = JsonSerializer.Deserialize(response);”
中收到强制错误无法从 'RestSharp.RestResponse' 转换为 'System.Text.Json.JsonDocument' NUnitAPIPractice
如果我改成
var deserial = JsonSerializer.Deserialize<Posts>(response).ToSring();
然后编译问题就解决了,但是在我执行代码之后我得到了
System.Text.Json.JsonException : 'R' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
----> System.Text.Json.JsonReaderException : 'R' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
Stack Trace:
ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex)
请告诉我是否必须使用特殊的 JSON 转换将 RestSharp 响应转换为 JSON 才能解决此问题?谢谢
您正在尝试反序列化整个 RESTSharp 响应对象,而不仅仅是它的 json 内容。
响应内容的字符串表示形式在响应变量的 Content 属性 中可用,请尝试反序列化它:
var deserial = JsonSerializer.Deserialize<Posts>(response.Content);
查看 restsharp 源代码,第 56 行: https://github.com/restsharp/RestSharp/blob/dev/src/RestSharp/Response/RestResponseBase.cs
RestSharp 将为您反序列化它。
var response = await restClient.ExecuteGetAsync<Posts>(request);
var deserialized = response.Data;
或者
var deserialized = await restClient.GetAsync<Posts>(request);
参考 documentation 总是一个好主意。