Как использовать JSON для заполнения ObservableCollection?

Как заполнить ObservableCollection с помощью JSON? Теперь в настольном приложении есть только сам скрипт и модель. Я не могу понять, как связать это.
Я получаю это после запуска скрипта:

{
"records": [
{
"brand_id": "1",
"brand_name": "Gigabyte"},
{
"brand_id": "2",
"brand_name": "MSI"},
{
"brand_id": "3",
"brand_name": "Lenovo"},
{
"brand_id": "4",
"brand_name": "Dell"},
{
"brand_id": "5",
"brand_name": "Google"}
]}

И у меня есть модель в приложении:

public class Brands
{
int brand_id;
string brand_name;

public int Brand_id { get => brand_id; set => brand_id = value; }
public string Brand_name { get => brand_name; set => brand_name = value; }
}

И коллекция:

public class BrandsCollection
{
private ObservableCollection<Brands> brands;

public ObservableCollection<Brands> Brands { get => brands; set => brands = value; }
}

1

Решение

Это довольно просто, особенно с пакетами, доступными, чтобы упростить большую часть работы. Пакет Nuget System.Net.Http будет иметь пакеты, необходимые для создания HttpClient в Get() Ваш JSON из Интернета. рекомендую Newtonsoft.Json разобрать JSON в объект C #. И затем имея объект, вам просто нужно установить DataGrid.ItemSource быть массивом объектов любого типа, чтобы он мог генерировать столбцы.

Простой пример:

Сначала вы должны определить простое объектное представление ваших данных JSON.
Например, если у вас были следующие данные:

[
{
"Name":"Test",
"Data": ["Item1","Item2"]
},
{
"Name":"Test 2",
"Data": ["Item3","Item4"]
}
]

Вы должны будете создать эквивалентное представление C #.
В основном это список объектов так:

public class OuterObject : List<InnerObject> {}

Внутренний объект выглядит следующим образом:

public class InnerObject {
public string Name { get; set; }
public List<string> Data { get; set; }
}

Определив объекты, вы можете сделать что-то вроде:

HttpClient client = new HttpClient { BaseAddress = new Uri("ADDRESS") };
var json = await client.GetAsync("/ENDPOINT");
JsonSerializer serializer = JsonSerializer.CreateDefault();

using (StringReader reader = new StringReader(json))
{
using (JsonTextReader jsonReader = new JsonTextReader(reader))
{
var result = serializer.Deserialize<OuterObject>(jsonReader);
}
}

Затем для доступа к данным в вашей программе вы можете получить к ним доступ следующим образом:

string name = result[0].Name;

Или установите его в DataGrid's ItemSource чтобы данные показывались волшебным образом.

grid1.ItemSource = result;

Пока результатом является массив элементов, он будет создавать строку для каждого элемента.
Вы можете указать, какие элементы отображаются, но это можно сделать, изменив DataGrid.Columns определения и настройки DataGrid.AutogenerateColumns = false

РЕДАКТИРОВАТЬ: с вашими данными и моделями

//Just a small change to the Collection
public class BrandsCollection {
private ObservableCollection<Brands> _records;

public ObservableCollection<Brands> records { get => _records; set => _records= value; }
}

И для разбора данных …

JsonSerializer serializer = JsonSerializer.CreateDefault();

using (StringReader reader = new StringReader(json))
{
using (JsonTextReader jsonReader = new JsonTextReader(reader))
{
var result = serializer.Deserialize<BrandsCollection>(jsonReader);
}
}

Вы должны помнить, чтобы использовать те же имена, что и метки json, либо использовать атрибуты Json. Для получения дополнительной информации об этом вы можете перейти на официальный Newtonsoft.Json документация

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]