/// <summary> /// Метод заполняет коллекцию заданных сущностей в модели представления, /// оправляя асинхронный GET-запрос к REST-сервису. /// </summary> /// <typeparam name="T"> /// По типу сущности определяется, какой необходимо отправить запрос к REST-сервису, /// а также определяется, какая модель представления участвует в процессе. /// </typeparam> /// <param name="id">Идентификатор извлекаемой сущности, опциональный</param> public void SelectAsync <T>(int?id = null) { var serializer = new DataContractJsonSerializer(typeof(T[])); string entityName = typeof(T).Name; HttpWebRequest httpWebRequest = WebRequest.CreateHttp(RestServiceAddress + entityName + (id.HasValue ? "/" + id : string.Empty)); httpWebRequest.Method = "GET"; var r = httpWebRequest.BeginGetResponse(asyncResult => { var request = (HttpWebRequest)asyncResult.AsyncState; var response = (HttpWebResponse)request.EndGetResponse(asyncResult); try { var entityArray = (T[])serializer.ReadObject(response.GetResponseStream()); var entityObservableCollection = new ObservableCollection <T>(entityArray); if (typeof(T) == typeof(Order)) { var entityViewModel = new OrderViewModel() { Orders = entityObservableCollection as ObservableCollection <Order> }; } else if (typeof(T) == typeof(Product)) { var entityViewModel = new ProductViewModel() { Products = entityObservableCollection as ObservableCollection <Product> }; } else if (typeof(T) == typeof(ProductDescriptor)) { var entityViewModel = new ProductDescriptorViewModel() { ProductDescriptors = entityObservableCollection as ObservableCollection <ProductDescriptor> }; } } catch (Exception) { if (typeof(T) == typeof(Order)) { var entityViewModel = new OrderViewModel() { Orders = null }; } else if (typeof(T) == typeof(Product)) { var entityViewModel = new ProductViewModel() { Products = null }; } else if (typeof(T) == typeof(ProductDescriptor)) { var entityViewModel = new ProductDescriptorViewModel() { ProductDescriptors = null }; } } RaisePropertyChanged("SelectAsyncCompleted"); }, httpWebRequest); }
/// <summary> /// Метод заполняет коллекцию заданных сущностей в модели представления, /// оправляя асинхронный GET-запрос к REST-сервису. /// Извлекаются потомки заданного родителя. /// </summary> /// <typeparam name="TParent">Тип родителя</typeparam> /// <typeparam name="TChild">Тип потомков</typeparam> /// <param name="parentId">Идентификатор родителя</param> protected void SelectByParentAsync <TParent, TChild>(int parentId) { var serializer = new DataContractJsonSerializer(typeof(TChild[])); string parentEntityName = typeof(TParent).Name; string childEntityName = typeof(TChild).Name; HttpWebRequest httpWebRequest = WebRequest.CreateHttp( RestServiceAddress + parentEntityName + "/" + parentId + "/" + childEntityName); httpWebRequest.Method = "GET"; var r = httpWebRequest.BeginGetResponse(asyncResult => { var request = (HttpWebRequest)asyncResult.AsyncState; var response = (HttpWebResponse)request.EndGetResponse(asyncResult); try { var entityArray = (TChild[])serializer.ReadObject(response.GetResponseStream()); var entityObservableCollection = new ObservableCollection <TChild>(entityArray); if (typeof(TChild) == typeof(Order)) { var entityViewModel = new OrderViewModel() { Orders = entityObservableCollection as ObservableCollection <Order> }; } else if (typeof(TChild) == typeof(Product)) { var entityViewModel = new ProductViewModel() { Products = entityObservableCollection as ObservableCollection <Product> }; } else if (typeof(TChild) == typeof(ProductDescriptor)) { var entityViewModel = new ProductDescriptorViewModel() { ProductDescriptors = entityObservableCollection as ObservableCollection <ProductDescriptor> }; } } catch (Exception) { if (typeof(TChild) == typeof(Order)) { var entityViewModel = new OrderViewModel() { Orders = null }; } else if (typeof(TChild) == typeof(Product)) { var entityViewModel = new ProductViewModel() { Products = null }; } else if (typeof(TChild) == typeof(ProductDescriptor)) { var entityViewModel = new ProductDescriptorViewModel() { ProductDescriptors = null }; } } RaisePropertyChanged("SelectByParentAsyncCompleted"); }, httpWebRequest); }