使用 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<T>
:
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<T>
静态方法:
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 序列化和反序列化
如何将 JSON 返回反序列化为从 RestSharp 调用到 API 的对象数组?