在C#中解析Json休息api响应

时间:2013-08-28 14:20:53

标签: c# json rest api parsing

我试图使用C#从rest api json响应中提取一个值。

我有以下代码:

client.BaseUrl = "https://api.cloud.appcelerator.com";
request.Resource = "/v1/chats/create.json?key=" + cac.AppCode.ToString();
request.Method = Method.POST;
request.AddUrlSegment("appkey", "key");
var response = client.Execute(request);

在“回复”消息中,我得到了一个json内容如下:

{
  "meta": {
    "code": 200,
    "status": "ok",
    "method_name": "createChatMessage"
  },
  "response": {
    "chats": [
      {
        "id": "521cfcd840926a0b3500449e",
        "created_at": "2013-08-27T19:24:08+0000",
        "updated_at": "2013-08-27T19:24:08+0000",
        "message": " join to the chat group, welcome …",
        "from": {
          "id": "520f41e125e74b0b2400130a",
          "first_name": "Administrator",
          "created_at": "2013-08-17T09:26:57+0000",
          "updated_at": "2013-08-27T19:23:10+0000",
          "external_accounts": [

          ],
          "email": "roy@tomax.co.il",
          "confirmed_at": "2013-08-17T09:26:57+0000",
          "username": "admin",
          "admin": "true",
          "stats": {
            "photos": {
              "total_count": 0
            },
            "storage": {
              "used": 0
            }
          }
        },
        "chat_group": {
          "id": "521cfcd840926a0b3500449d",
          "created_at": "2013-08-27T19:24:08+0000",
          "updated_at": "2013-08-27T19:24:08+0000",
          "message": " join to the chat group, welcome …",
          "participate_users": [
            {
              "id": "520f41e125e74b0b2400130a",
              "first_name": "Administrator",
              "created_at": "2013-08-17T09:26:57+0000",
              "updated_at": "2013-08-27T19:23:10+0000",
              "external_accounts": [

              ],
              "email": "roy@tomax.co.il",
              "confirmed_at": "2013-08-17T09:26:57+0000",
              "username": "admin",
              "admin": "true",
              "stats": {
                "photos": {
                  "total_count": 0
                },
                "storage": {
                  "used": 0
                }
              }
            }
          ]
        }
      }
    ]
  }
}

如何从返回的json响应结果消息中提取以下嵌套值“id”:“521cfcd840926a0b3500449e”?

我正在使用C#。

3 个答案:

答案 0 :(得分:38)

1>添加此namspace。 使用Newtonsoft.Json.Linq;

2 - ;使用此源代码。

JObject joResponse = JObject.Parse(response);                   
JObject ojObject = (JObject)joResponse["response"];
JArray array= (JArray)ojObject ["chats"];
int id = Convert.ToInt32(array[0].toString());

答案 1 :(得分:20)

  1. 创建与您的数据匹配的类
  2. 然后使用JSON.NET将JSON数据转换为常规C#对象。
  3. 第1步:一个很棒的工具 - http://json2csharp.com/ - 由它生成的结果在

    之下

    第2步:JToken.Parse(...).ToObject<RootObject>()

    public class Meta
    {
        public int code { get; set; }
        public string status { get; set; }
        public string method_name { get; set; }
    }
    
    public class Photos
    {
        public int total_count { get; set; }
    }
    
    public class Storage
    {
        public int used { get; set; }
    }
    
    public class Stats
    {
        public Photos photos { get; set; }
        public Storage storage { get; set; }
    }
    
    public class From
    {
        public string id { get; set; }
        public string first_name { get; set; }
        public string created_at { get; set; }
        public string updated_at { get; set; }
        public List<object> external_accounts { get; set; }
        public string email { get; set; }
        public string confirmed_at { get; set; }
        public string username { get; set; }
        public string admin { get; set; }
        public Stats stats { get; set; }
    }
    
    public class ParticipateUser
    {
        public string id { get; set; }
        public string first_name { get; set; }
        public string created_at { get; set; }
        public string updated_at { get; set; }
        public List<object> external_accounts { get; set; }
        public string email { get; set; }
        public string confirmed_at { get; set; }
        public string username { get; set; }
        public string admin { get; set; }
        public Stats stats { get; set; }
    }
    
    public class ChatGroup
    {
        public string id { get; set; }
        public string created_at { get; set; }
        public string updated_at { get; set; }
        public string message { get; set; }
        public List<ParticipateUser> participate_users { get; set; }
    }
    
    public class Chat
    {
        public string id { get; set; }
        public string created_at { get; set; }
        public string updated_at { get; set; }
        public string message { get; set; }
        public From from { get; set; }
        public ChatGroup chat_group { get; set; }
    }
    
    public class Response
    {
        public List<Chat> chats { get; set; }
    }
    
    public class RootObject
    {
        public Meta meta { get; set; }
        public Response response { get; set; }
    }
    

答案 2 :(得分:1)

创建一个映射到Json的C#类,并使用Newsoft JsonConvert对其进行反序列化。

例如:

public Class MyResponse
{
    public Meta Meta { get; set; }
    public Response Response { get; set; }
}