使用newtonsoft或restsharp反序列化json字符串

Ian*_*ink 29 c# rest json restsharp asp.net-web-api

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

我试图用以下方法反序列化它:

RestSharp.Deserializers.JsonDeserializer deserial = new JsonDeserializer();
var x = deserial .Deserialize<Customer>(myStringFromDB)
Run Code Online (Sandbox Code Playgroud)

.Deserialize功能期望一个IRestResponse

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

Ste*_*J81 40

如果您想避免使用额外的库,请尝试以下方法:

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

response.Content = myStringFromDB; 

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

Customer x = deserial.Deserialize<Customer>(response);
Run Code Online (Sandbox Code Playgroud)

注意事项适用 - 未经过广泛测试 - 但似乎运作良好.

  • 在我使用的RestSharp版本中,看起来JsonDeserializer类已移至RestSharp.Serialization.Json.JsonDeserializer (2认同)
  • 就我而言,RestSharp 反序列化器比 Newtonsoft 反序列化器更好地处理 json 内容中的时髦对象名称,因此这是不为此而包含另一个库的另一个论点。 (2认同)

Fel*_*ani 37

我也有这个问题,我用它来解决它Newtonsoft.Json.

包括这些名称空间:

using Newtonsoft.Json;
using RestSharp;
Run Code Online (Sandbox Code Playgroud)

并尝试这样的事情:

return JsonConvert.DeserializeObject<T>(response.Content);
Run Code Online (Sandbox Code Playgroud)

response.Content,您将获得原始结果,因此只需将此字符串反序列化为json对象.该T在的情况下,你需要反序列化的类型.样品:

var customerDto = JsonConvert.DeserializeObject<CustomerDto>(response.Content);
Run Code Online (Sandbox Code Playgroud)

  • RestSharp序列化器和解串器是问题所在.通过使用Newton soft,问题就消失了. (3认同)