簡體   English   中英

從Web api獲取json數組到c#

[英]Get json array from Web api into c#

我有一個SQL數據庫,我想將APISQL值轉換為c#代碼。 API包含多個具有房間屬性的房間,每個房間都有一個Guid作為id。

這段代碼有效,但我只能得到一個房間:

string url = "https://api.booking.com/api/room/35bf3c4d-9b5b-40fd-bcf4-a4c2c6c564bc";

HttpClient client = new HttpClient();

string response = await client.GetStringAsync(url);

var data = JsonConvert.DeserializeObject<Class2>(response);

當我刪除id (Guid)以獲取所有房間時,我在啟動應用程序時出現此錯誤:

Newtonsoft.Json.JsonSerializationException:'無法將當前JSON數組(例如[1,2,3])反序列化為類型'Class2',因為該類型需要JSON對象(例如{“name”:“value”})才能正確反序列化。 要修復此錯誤,請將JSON更改為JSON對象(例如{“name”:“value”})或將反序列化類型更改為數組或實現集合接口的類型(例如ICollection,IList),例如List從JSON數組反序列化。 JsonArrayAttribute也可以添加到類型中以強制它從JSON數組反序列化。 路徑'',第1行,第1位。'

這是沒有Guid的代碼:

string url = "https://api.booking.com/api/room";

HttpClient client = new HttpClient();

string response = await client.GetStringAsync(url);

var data = JsonConvert.DeserializeObject<Class2>(response);

我的問題是簡短的說法“如何從api中獲取json數組?”。

提前致謝!

編輯:

這是class2的代碼:

public class Class2
{
    public string name { get; set; }
    public string id { get; set; }
    public int seats { get; set; }
    public int? availableFrom { get; set; }
    public int? availableTo { get; set; }
}

這是API房間的較長輸出:

[
{
    "name": "Rum 1",
    "id": "a31d1fc8-df29-419c-8308-f8bc884b378e",
    "seats": 10,
    "availableFrom": null,
    "availableTo": null
  },
  {
    "name": "Rum 2",
    "id": "7defd34d-222d-4980-b28f-e616e8b9003c",
    "seats": 5,
    "availableFrom": null,
    "availableTo": null
  },
  {
    "name": "Skrubben",
    "id": "b20390ff-703b-4d80-8c2f-32c0f27158bc",
    "seats": 5,
    "availableFrom": 10,
    "availableTo": 11
  },
  {
    "name": "Hangaren",
    "id": "b89cbacd-c738-477f-aff2-7f22c2b2cd5c",
    "seats": 100,
    "availableFrom": null,
    "availableTo": null
  },
  {
    "name": "Tv-rummet",
    "id": "ea6a290f-209b-4ccb-91a4-65d82a674bad",
    "seats": 10,
    "availableFrom": null,
    "availableTo": null
  },
  {
    "name": "Projektor-rummet",
    "id": "3136a56a-4a28-4939-aca8-806534c808f7",
    "seats": 12,
    "availableFrom": null,
    "availableTo": null
  },
  {
    "name": "Skolsalen",
    "id": "05f73582-3734-453f-aeb3-36daf8884912",
    "seats": 30,
    "availableFrom": null,
    "availableTo": null
  }
]

正如錯誤所示,

您正在將數組反序列化為類。 它永遠不會奏效。 您需要使用下面的代碼片段將其反序列化為數組或列表。

嘗試:
var data = JsonConvert.DeserializeObject<List<Class2>>(response);
要么
var data = JsonConvert.DeserializeObject<Class2[]>(response);
它會工作正常。

編輯1:

foreach(var room in data)
{
   string id = room.id;
   string name = room.name;

   // and so on
}

多個Class2對象必須使用List或Array類型來轉換它們,你可以嘗試JsonConvert.DeserializeObject<List<Class2>>(response)

暫無
暫無

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

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