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

jmk*_*k22 5 c# json restsharp json-deserialization

我正在尝试反序列化从 RestSharp 调用 API 返回的 JSON。

这是一个 C# 控制台应用程序。到目前为止,这是我的代码:

using System;
using RestSharp;
using RestSharp.Authenticators;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using RestSharp.Deserializers;
using System.Collections.Generic;

namespace TwilioTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new RestClient("https://api.twilio.com/2010-04-01");
            var request = new RestRequest("Accounts/{{Account Sid}}/Messages.json", Method.GET);
            request.AddParameter("To", "{{phone number}}");
            request.AddParameter("From", "{{phone number}}");
            client.Authenticator = new HttpBasicAuthenticator("{{account sid}}", "{{auth token}}");
            var response = client.Execute(request);
            var jsonResponse = JsonConvert.DeserializeObject(response.Content);
            Console.WriteLine(jsonResponse);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

响应是 JSON 格式的消息列表,键包括"to""from""body""status"。看起来是这样的:

{
  "to": "{{phone number}}",
  "from": "{{phone number}}",
  "body": "Sent from your Twilio trial account - Message 1!",
  "status": "delivered"
},
{
  "to": "{{phone number}}",
  "from": "{{phone number}}",
  "body": "Sent from your Twilio trial account - Message 2",
  "status": "delivered"
},
Run Code Online (Sandbox Code Playgroud)

我想将其转换为一个Message对象数组,其中的Message类如下所示:

class Message
{
    public string To { get; set; }
    public string From { get; set; }
    public string Body { get; set; }
    public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我一直在寻找如何将 JSON 转换为对象,并找到了此页面: http: //blog.atavisticsoftware.com/2014/02/using-restsharp-to-deserialize-json.html。该页面上的第三个示例符合我想要的内容。

我对程序做了一些更改,现在它看起来像这样:

    class Program
    {
        static void Main(string[] args)
        {
            // same as above until this point
            ...
            var response = client.Execute(request);
            JsonDeserializer deserial = new JsonDeserializer();
            var messageList = deserial.Deserialize<List<Message>>(response);
            foreach (Message element in messageList)
            {
                Console.WriteLine("To: {0}", element.To);
                Console.WriteLine("From: {0}", element.From);
                Console.WriteLine("Body: {0}", element.Body);

            }
            Console.ReadLine();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,messageList当我运行程序时,它是空的。将 JSON 响应转换为对象列表时我缺少什么?RestSharp 文档使它看起来相当简单。

Tho*_*mas 3

我对 RestSharp 不太了解,但你可以这样获取响应内容字符串:

\n\n
var responseContent = client.Execute(request).Content;\n
Run Code Online (Sandbox Code Playgroud)\n\n

并使用Json.Net反序列化你的 json 字符串:

\n\n
JObject jsonResponse = (JObject)JsonConvert.DeserializeObject(response.Content);\nvar messageList = JsonConvert.DeserializeObject<List<Message>>(jsonResponse["messages"].ToString()\xe2\x80\x8c\xe2\x80\x8b);\n
Run Code Online (Sandbox Code Playgroud)\n