【问题标题】:RestSharp (C#) - Deserialize JSON Objects to NULLRestSharp (C#) - 将 JSON 对象反序列化为 NULL
【发布时间】:2013-12-05 15:14:57
【问题描述】:

我正在尝试通过在我的应用程序中使用 RestSharp 来理解 REST。

这是我的客户返回的一些 JSON:

{
   "result" : {
      "object_type" : "session",
      "user_id" : "FEE3CBD4-5D35-11E3-A42A-606A40E381E5",
      "object_name" : "Session",
      "id" : "2F2968B6-5D37-11E3-89F4-5D6A40E381E5"
   }
}

这是我的类对象:

public class TGCResult : IDeserializer
{
    public string object_type {get; set;}
    public string user_id { get; set; }
    public string object_name { get; set; }
    public string id { get; set; }

    public TGCResult()
    {
    }

    public override string ToString()
    {
        return "object_type = " + object_type + "\nuser_id = " + user_id + "\nobject_name = " + object_name + "\nid = " + id;
    }
}

这是我检索 JSON 并尝试反序列化的代码:

var client = new RestClient("https://www.xxxxxxxxx.com");

var request = new RestRequest("/api/session", Method.POST);
request.AddParameter("username", "JSventoraGD");
request.AddParameter("password", "xxxxxxxxxxxxxxxx");
request.AddParameter("api_key_id", "xxxxxxxxxxxxxxxxxxx");
request.RequestFormat = DataFormat.Json;

var asyncHandle = client.ExecuteAsync<TGCResult>(request, response =>
{
    TxtTest.Text = response.Data.ToString();
});

asyncHandle.Abort();

执行此操作时,我可以看到数据正确返回到我的应用程序,但我的响应中的数据始终具有 NULL 值。关于为什么会发生这种情况的任何想法?给定内容,我是否应该手动反序列化 JSON?我在网上看到的示例与我的设置非常相似,我迷路了......非常感谢任何帮助!

【问题讨论】:

    标签: c# json serialization restsharp


    【解决方案1】:
    var asyncHandle=client.ExecuteAsync(request,response=>{    
       String res=response.Content;
       T obj = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(res); 
    });
    

    【讨论】:

    • 请详细说明你的答案
    【解决方案2】:

    尝试添加

    request.RootElement = "result";
    

    我刚刚花了几个小时试图获得一个简单的 GET 请求来解析除 null 之外的任何内容,设置 RootElement 帮助了我。有点惊讶我需要它,因为您在代码中的其他几个位置设置了类型类。

    【讨论】:

      【解决方案3】:

      尝试像这样使用它

      var asyncHandle = client.ExecuteAsync(request, response =>
      {
          var json = response.Content;
          // deserialize to TGCResult
      });
      

      这对我来说很好用

      【讨论】:

        【解决方案4】:

        看来您需要另一个类作为您的数据类型。

        public class TGCResultContainer
        {
            public TGCResult result { get; set; }
        }
        

        另外,您的 TGCResult 类不需要实现 IDeserializer。

        【讨论】:

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