Всем привет! Есть такой вот JSON -
{
"result": [
{
"banner_image_light": "",
"country": "",
"parent": "",
"u_glide_date_2": "",
"notes": "",
"u_group": "",
"stock_symbol": "",
"discount": "",
"sys_updated_on": "",
"u_manager": {
"link": "",
"value": ""
},
"apple_icon": "",
"u_client_type": "",
"sys_updated_by": "",
"fiscal_year": "",
"sys_created_on": "",
"contact": "",
"stock_price": "",
"banner_image": "",
"state": "",
"u_short_name": "",
}
]
}
Получаю JSON через RestSharp, используя REST API, и заношу в переменную типа String. В массиве "result" значений может быть много. Мне необходимо достать значения по ключу "u_short_name" и занести в массив, для последующего использования в Combobox. Как это реализовать?
Подключаем из nuget библиотеку Json.NET.
Открываем пространство имён:
using Newtonsoft.Json.Linq;
Пишем:
var text = File.ReadAllText("test.json");
var json = JObject.Parse(text);
var shortNames = json["result"]
.Select(token => token["u_short_name"].Value<string>())
.ToArray();
comboBox.DataSource = shortNames;
Этот способ не требует создания моделей классов. Иногда он удобен, благодаря простоте. В других случаях лучше будет создать классы.
Пример с использованием моделей:
Создаем 3 модели:
public class Result
{
[JsonProperty("result")]
public ResultElement[] ResultResult { get; set; }
}
public class ResultElement
{
[JsonProperty("banner_image_light")]
public string BannerImageLight { get; set; }
[JsonProperty("country")]
public string Country { get; set; }
[JsonProperty("parent")]
public string Parent { get; set; }
[JsonProperty("u_glide_date_2")]
public string UGlideDate2 { get; set; }
[JsonProperty("notes")]
public string Notes { get; set; }
[JsonProperty("u_group")]
public string UGroup { get; set; }
[JsonProperty("stock_symbol")]
public string StockSymbol { get; set; }
[JsonProperty("discount")]
public string Discount { get; set; }
[JsonProperty("sys_updated_on")]
public string SysUpdatedOn { get; set; }
[JsonProperty("u_manager")]
public UManager UManager { get; set; }
[JsonProperty("apple_icon")]
public string AppleIcon { get; set; }
[JsonProperty("u_client_type")]
public string UClientType { get; set; }
[JsonProperty("sys_updated_by")]
public string SysUpdatedBy { get; set; }
[JsonProperty("fiscal_year")]
public string FiscalYear { get; set; }
[JsonProperty("sys_created_on")]
public string SysCreatedOn { get; set; }
[JsonProperty("contact")]
public string Contact { get; set; }
[JsonProperty("stock_price")]
public string StockPrice { get; set; }
[JsonProperty("banner_image")]
public string BannerImage { get; set; }
[JsonProperty("state")]
public string State { get; set; }
[JsonProperty("u_short_name")]
public string UShortName { get; set; }
}
public class UManager
{
[JsonProperty("link")]
public string Link { get; set; }
[JsonProperty("value")]
public string Value { get; set; }
}
В итоге код сводится к следующему:
var rawJson = File.ReadAllText("test.json");
Result result = JsonConvert.DeserializeObject<Result>(rawJson);
var shortNames = result.ResultResult.Select(x => x.UShortName);
comboBox.DataSource = shortNames;
Так же как и вариант от Alexander Petrov, мой вариант решения имеет как плюсы, так и минусы.
(p.s. - модели все созданы через https://app.quicktype.io/, удобный вариант для создания моделей)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пишу приложение на WPF, которое взаимодействует с БД MySQLВнутри TabItem есть DataGrid, который выводит данные из БД:
Подскажите как реализовать в WPF приложении условияНапример, я хочу, чтобы в зависимости от текста одного TextBlock'a изменялся цвет текста другого...
Необходимо получать данные о количестве мониторов, а так-же о рабочей области каждого из них, иметь возможность получить вычислить монитор,...