Hashtable достать массив
Ранее json был такого вида {"response":[1,3212,2453,4444,444554455]} и я доставал массив id таким образом
List<string> list = new List<string>();
Hashtable hashtable = JSONTools.JsonDecode(json) as Hashtable;
foreach (object obj in (hashtable["response"] as ArrayList))
{
list.Add(obj.ToString());
}
Но теперь json такого вида {"response":{"count":5,"items":[1,3212,2453,4444,444554455]}}, как мне достать массив items также через Hashtable?
Ответы (1 шт):
Для начала, чтобы был понятно всем, что происходит, лучше использовать более популярную библиотеку для работы с JSON - Json.NET
Установиту NuGet пакет Newtonsoft.JSON, и подключите Namespace
using Newtonsoft.Json;
Показываю пример десереализации JSON, с таким подходом вы сможете разобрать JSON данные любой сложности, логика прозрачна.
Создайте модель данных, для вашего случая потребуется 2 класса. Классы и свойства можете называть так, как вам больше нравится, но JsonProperty должны соответствовать тому, что у вас в JSON'е.
public class JsonData
{
[JsonProperty("response")]
public JsonResponse Response { get; set; }
}
public class JsonResponse
{
[JsonProperty("count")]
public int Count { get; set; }
[JsonProperty("items")]
public List<int> Items { get; set; }
}
И сам код, я использовал обычное консольное приложение для теста
static void Main(string[] args)
{
string jsonText = "{\"response\":{\"count\":5,\"items\":[1,3212,2453,4444,444554455]}}";
JsonData data = JsonConvert.DeserializeObject<JsonData>(jsonText);
foreach(int number in data.Response.Items)
{
Console.WriteLine(number);
}
Console.ReadKey();
}
Вывод в консоль
1
3212
2453
4444
444554455
Для .NET Core 3.1 NuGet пакет не требуется.
using System.Text.Json;
А строка десереализации будет выглядеть так:
JsonData data = JsonSerializer.Deserialize<JsonData>(jsonText);
Вот пример с Dictionary, в этом случае класс JsonData не требуется.
static void Main(string[] args)
{
string jsonText = "{\"response\":{\"count\":5,\"items\":[1,3212,2453,4444,444554455]}}";
Dictionary<string, JsonResponse> data = JsonConvert.DeserializeObject<Dictionary<string, JsonResponse>>(jsonText);
foreach (int number in data["response"].Items)
{
Console.WriteLine(number);
}
Console.ReadKey();
}