【问题标题】:Deserialize JSON response using RestSharp result in null object [duplicate]使用 RestSharp 反序列化 JSON 响应导致空对象 [重复]
【发布时间】:2018-11-27 12:53:40
【问题描述】:

我正在尝试使用 RestSharp 使用 REST API 并反序列化到我的 User 类。

这是我的 JSON 响应:

   [
      {
        "AdName": "sample string 1",
        "Email": "sample string 2",
        "Name": "sample string 3"
      },
      {
        "AdName": "sample string 1",
        "Email": "sample string 2",
        "Name": "sample string 3"
      }
    ]

这是 API 客户端:

public class SamTApi
{
    const string BaseUrl = "http://localhost:8097/SamT_WebApi/api/User";


    public T Execute<T>(RestRequest request) where T : new()
    {
        var client = new RestClient();
        client.AddHandler("application/json", new JsonDeserializer());
        client.BaseUrl = new Uri(BaseUrl);

        var response = client.Execute<T>(request);

        return response.Data;
    }

    public List<User> GetUser()
    {
        var request = new RestRequest(Method.GET);
        request.RequestFormat = DataFormat.Json;
        return Execute<List<User>>(request);
    }
}

这是我的用户类:

public class User
{
    public string AdName { get; set; }
    public string Email { get; set; }
    public string Name { get; set; }
}

public class UserResponse
{
    public User User { get; set; }
}

所以当我尝试断言时:

var api = new SamTApi();
var users = api.GetUser();
Assert.IsNotNull(users, "users != null");

它导致 users = null。我不确定我错过了什么。

【问题讨论】:

  • 我不是 RestSharp 专家,但我认为您不需要 AddHandler,我认为它默认使用 json 反序列化。您已经通过调试确认response.Data 是JSON?
  • 你是对的,AddHandler 是多余的。它实际上根据返回的 Content-Type 选择反序列化器。我发现由于身份验证,我的响应返回 null。在这里找到了答案。 link感谢您的帮助!

标签: c# json rest api restsharp


【解决方案1】:

使用 Newtonsoft Json nuget 包。安装时只需调用:

var destinationObject = JsonConvert.DeserializeObject<DestinationClass>(json);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多