从Web api获取json数组到c#

时间:2018-05-25 09:35:18

标签: c# json uwp

我有一个SQL数据库,我希望将SQL中的API值转换为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
  }
]

2 个答案:

答案 0 :(得分:4)

如错误所示,

  

您正在将数组反序列化为类。它永远不会奏效。您   需要使用下面的代码片段将其反序列化为数组或列表。

尝试:
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
}

答案 1 :(得分:0)

多个Class2对象必须使用List或Array类型来转换它们, 你可以尝试JsonConvert.DeserializeObject<List<Class2>>(response)