Получение коллекции из ассинхронного вызова - C#
Формулировка задачи:
Здравствуйте. Есть классы, с помощью которых парсится json файл
Подскажите, как теперь правильно получить коллекцию данных?
Пытаюсь так, но не знаю, как дальше извлекать данные (например, переменной задать заголовок string Title = groups[0].Title)
Думаю, что вообще не правильно осуществляю асинхронный вызов. Хотя данные в переменную заполняются(см рисунок).
public class SampleDataItem { public SampleDataItem(String uniqueId, String title, String subtitle, String imagePath, String description, String content) { this.UniqueId = uniqueId; this.Title = title; this.Subtitle = subtitle; this.Description = description; this.ImagePath = imagePath; this.Content = content; } public string UniqueId { get; private set; } public string Title { get; private set; } public string Subtitle { get; private set; } public string Description { get; private set; } public string ImagePath { get; private set; } public string Content { get; private set; } public override string ToString() { return this.Title; } } public class SampleDataGroup { public SampleDataGroup(String uniqueId, String title, String subtitle, String imagePath, String description) { this.UniqueId = uniqueId; this.Title = title; this.Subtitle = subtitle; this.Description = description; this.ImagePath = imagePath; this.Items = new ObservableCollection<SampleDataItem>(); } public string UniqueId { get; private set; } public string Title { get; private set; } public string Subtitle { get; private set; } public string Description { get; private set; } public string ImagePath { get; private set; } public ObservableCollection<SampleDataItem> Items { get; private set; } public override string ToString() { return this.Title; } } public sealed class SampleDataSource { private static SampleDataSource _sampleDataSource = new SampleDataSource(); private ObservableCollection<SampleDataGroup> _groups = new ObservableCollection<SampleDataGroup>(); private static AssetManager _asset = null; public static AssetManager Asset { get { return SampleDataSource._asset; } set { SampleDataSource._asset = value; } } public ObservableCollection<SampleDataGroup> Groups { get { return this._groups; } } public static async Task<IEnumerable<SampleDataGroup>> GetGroupsAsync() { await _sampleDataSource.GetSampleDataAsync(); return _sampleDataSource.Groups; } public static async Task<SampleDataGroup> GetGroupAsync(string uniqueId) { await _sampleDataSource.GetSampleDataAsync(); // Для небольших наборов данных можно использовать простой линейный поиск var matches = _sampleDataSource.Groups.Where((group) => group.UniqueId.Equals(uniqueId)); if (matches.Count() == 1) return matches.First(); return null; } public static async Task<SampleDataItem> GetItemAsync(string uniqueId) { await _sampleDataSource.GetSampleDataAsync(); // Для небольших наборов данных можно использовать простой линейный поиск var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.UniqueId.Equals(uniqueId)); if (matches.Count() == 1) return matches.First(); return null; } private async Task GetSampleDataAsync() { if (this._groups.Count != 0) return; StreamReader strm = new StreamReader(Asset.Open("SampleData.json")); string jsonText = await strm.ReadToEndAsync(); JSONObject jsonObject = new JSONObject(jsonText); JSONArray jsonArray = jsonObject.GetJSONArray("Groups"); for (int i = 0; i < jsonArray.Length(); i++) { JSONObject groupObject = jsonArray.GetJSONObject(i); SampleDataGroup group = new SampleDataGroup(groupObject.GetString("UniqueId"), groupObject.GetString("Title"), groupObject.GetString("Subtitle"), groupObject.GetString("ImagePath"), groupObject.GetString("Description")); JSONArray jsonArrayItems = groupObject.GetJSONArray("Items"); for (int j = 0; j < jsonArrayItems.Length(); j++) { JSONObject itemObject = jsonArrayItems.GetJSONObject(j); group.Items.Add(new SampleDataItem(itemObject.GetString("UniqueId"), itemObject.GetString("Title"), itemObject.GetString("Subtitle"), itemObject.GetString("ImagePath"), itemObject.GetString("Description"), itemObject.GetString("Content"))); } this.Groups.Add(group); } } }
Task<IEnumerable<SampleDataGroup>> groups = SampleDataSource.GetGroupsAsync();
Решение задачи: «Получение коллекции из ассинхронного вызова»
textual
Листинг программы
IEnumerable<SampleDataGroup> groups = await SampleDataSource.GetGroupsAsync();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д