使用 restsharp 反序列化 json 字符串

Posted

技术标签:

【中文标题】使用 restsharp 反序列化 json 字符串【英文标题】:Deserializing a json string with restsharp 【发布时间】:2013-05-07 23:01:54 【问题描述】:

我有一个来自 Json 格式的数据库的字符串。

我尝试使用以下方法对其进行反序列化:

RestSharp.Deserializers.JsonDeserializer deserial = new JsonDeserializer();
var x = deserial .Deserialize<Customer>(myStringFromDB)

但是.Deserialize 函数需要IRestResponse

有没有办法使用 RestSharp 来反序列化原始字符串?

【问题讨论】:

我感受到你的痛苦 【参考方案1】:

有几种方法可以做到这一点。一个非常流行的处理 json 的库是 Newtonsoft.Json。可能您已经在您的 asp.net 项目中拥有它,但如果没有,您可以从 nuget 添加它。

假设您有一个响应对象,请包含以下命名空间并从 JsonConvert 类调用静态方法 DeserializeObject&lt;T&gt;

using Newtonsoft.Json;
using RestSharp;
return JsonConvert.DeserializeObject<T>(response.Content);

response.Content 上,您将获得原始结果,因此只需将此字符串反序列化为 json 对象。案例中的T 是你需要反序列化的类型。

例如:

var customerDto = JsonConvert.DeserializeObject<CustomerDto>(response.Content);

更新

最近,微软在 .Net 平台上增加了一个命名空间System.Text.Json 来处理 json 格式。您可以使用它调用JsonSerializer.Deserialize&lt;T&gt; 静态方法:

using System.Text.Json;
var customer = JsonSerializer.Deserialize<Customer>(jsonContent);

【讨论】:

RestSharp 序列化器和反序列化器是问题所在。通过使用牛顿软,问题消失了。 @BahaiResearch.com RestSharp 的序列化器/反序列化器本身并不是问题;它只是没有您需要的功能,因为 RestSharp 是一个 http 客户端库,而不是通用的序列化工具。正如您所指出的,它需要一个IRestResponse,而不是让我们说支持一个IRestResponse.Content(字符串类型)。如果出于某种原因您想要或必须使用 RestSharp 进行 json 反序列化,下面的 StevieJ81 指出了一种潜在的解决方法:他直接插入 IRestResponse.Content。【参考方案2】:

如果你想避免使用额外的库,试试这个:

RestSharp.RestResponse response = new RestSharp.RestResponse();

response.Content = myStringFromDB; 

RestSharp.Deserializers.JsonDeserializer deserial = new JsonDeserializer();

Customer x = deserial.Deserialize<Customer>(response);

注意事项 - 未经广泛测试 - 但似乎工作得很好。

【讨论】:

效果很好。我必须在我的应用程序中包含少一个库。 在我使用的 RestSharp 版本中,看起来 JsonDeserializer 类已移至 RestSharp.Serialization.Json.JsonDeserializer 我认为这不再有效,至少对于版本“100.6.10” 在我的例子中,RestSharp 反序列化器比 Newtonsoft 反序列化器更好地处理 json 内容中的时髦对象名称,所以这是另一个不为此包含另一个库的论点。

以上是关于使用 restsharp 反序列化 json 字符串的主要内容,如果未能解决你的问题,请参考以下文章

unity Restsharp Api Json 序列化和反序列化

csharp RestSharp将JSON反序列化为动态

如何将 JSON 返回反序列化为从 RestSharp 调用到 API 的对象数组?

RestSharp用法小结

RestSharp:从结果中获取空值。调试结果时的数据虽然返回了 JSON

RestSharp 显示无法创建接口实例的错误必须手动反序列化