簡體   English   中英

使用C#從外部API讀取JSON數據

[英]Reading json data from external api using C#

我正在嘗試讀取來自api的json數據,而我只想從此數據中讀取對象。

 string id_url = "http://abc/some_id";

 WebRequest requst = WebRequest.Create(id_url);
 requst.Method = "GET";
 requst.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("user:password"));

 HttpWebResponse response = requst.GetResponse() as HttpWebResponse;

 var encod = ASCIIEncoding.ASCII;

 using (var readchat = new System.IO.StreamReader(response.GetResponseStream(), encod))
 {
     string chatresult = readchat.ReadToEnd();

     var json = JObject.Parse(chatresult);
 }

我得到json作為:

{
      "comment": null,
      "triggered_response": true,
      "rating": null,
      "visitor": {
        "phone": "",
        "name": "abc"
      },

      "history": [
        {
          "name": "Visitor 7949",
          "department_name": null,
          "type": "chat.memberjoin",
          "department_id": null
        },
        {
          "name": "fdef",
          "sender_type": "Trigger",
          "msg": "Welcome back! How may I help you today?",
          "type": "chat.msg"        
        },
        {
          "name": "use",
          "sender_type": "Trigger",
          "msg": "good morning",
          "type": "chat.msg"        
        }
      ]
}

我必須使用C#從json讀取“ msg”標簽數據。 我已經試過了:

string data = json["history"].ToString();

通過使用上面的代碼可以從“ history”標簽中獲取數據,但是就像我們使用javascript ajax一樣,如何能夠從history [array] .msg中獲取文本。

您可以將JsonConvert與動態對象JsonConvert.DeserializeObject<dynamic>(data)

樣例代碼:

string data = " {\"comment\": null,   \"triggered_response\": true,   \"rating\": null,   \"visitor\": {    \"phone\": \"\",    \"name\": \"abc\"   },   \"history\": [    {     \"name\": \"Visitor 7949\",     \"department_name\": null,     \"type\": \"chat.memberjoin\",     \"department_id\": null    },    {     \"name\": \"fdef\",     \"sender_type\": \"Trigger\",     \"msg\": \"Welcome back! How may I help you today?\",     \"type\": \"chat.msg\"        },{     \"name\": \"use\",     \"sender_type\": \"Trigger\",     \"msg\": \"good morning\",     \"type\": \"chat.msg\"        }   ]  }";

var dynamicobject = JsonConvert.DeserializeObject<dynamic>(data);

var historyname = dynamicobject.history[0].name.ToString();
  //data structure for mapping
public class History {
  public string name { get; set; }
  public string sender_type { get; set; }
  public string msg { get; set; }
  public string type { get; set; }
}

public class Visitor {
  public string Phone { get; set; }
  public string Name { get; set; }
}


public class ObjectThatContainsHistory {
  public string Comment { get; set; }
  public bool Triggered_Response { get; set; }
  public string Rating { get; set; }
  public Visitor Visitor { get; set; }

  public List<History> History { get; set; }
}

  var jsonString =
    @"{
        ""comment"": null,
        ""triggered_response"": true,
        ""rating"": null,
        ""visitor"": {
          ""phone"": """",
          ""name"": ""abc""
        },

        ""history"": [
          {
            ""name"": ""Visitor 7949"",
            ""department_name"": null,
            ""type"": ""chat.memberjoin"",
            ""department_id"": null
          },
          {
            ""name"": ""fdef"",
            ""sender_type"": ""Trigger"",
            ""msg"": ""Welcome back! How may I help you today?"",
            ""type"": ""chat.msg""        
          },
          {
            ""name"": ""use"",
            ""sender_type"": ""Trigger"",
            ""msg"": ""good morning"",
            ""type"": ""chat.msg""        
          }
        ]
    }";

  ObjectThatContainsHistory objectThatContainsHistory = JsonConvert.DeserializeObject<ObjectThatContainsHistory>(jsonString);

  var messages = objectThatContainsHistory.History
    .Select(x => x.msg)
    .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM