/// <summary>
        /// Выполнить запрос синхронно, передав в теле потока сериализованный объект и получить десериализованный результат
        /// </summary>
        /// <typeparam name="TResult">Тип передаваемого в запросе объекта</typeparam>
        /// <param name="request">Web запрос передающий Stream</param>
        /// <param name="stream"> Передаваемый объект </param>
        /// <returns> Результат web запроса </returns>
        public static TResult Execute <TResult>(this IRestStreamRequest request, Stream stream)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            return(request.Execute(stream).GetResultFromJson <TResult>());
        }
        /// <summary>
        /// Выполнить запрос синхронно, передав в теле потока сериализованный объект в Xml
        /// </summary>
        /// <typeparam name="T">Тип передаваемого в запросе объекта</typeparam>
        /// <param name="request">Web запрос передающий Stream</param>
        /// <param name="obj"> Передаваемый объект </param>
        /// <returns> Результат web запроса </returns>
        public static WebResponse Execute <T>(this IRestStreamRequest request, T obj)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            WebResponse response = null;

            obj.SerializeToStreamUsingJson(streamForRequest => { response = request.Execute(stream: streamForRequest); });

            return(response);
        }
        /// <summary>
        /// Синхронно выполняет Web запрос c передачей потока и получает результат
        /// <returns>Результат web запроса</returns>
        /// </summary>
        public static WebResponse Execute(this IRestStreamRequest restRequest, Stream stream)
        {
            if (restRequest == null)
            {
                throw new ArgumentNullException("restRequest");
            }

            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            return(restRequest.ExecuteAsync(stream).GetAwaiter().GetResult());
        }
        public static WebResponse ExecuteXml <T>(this IRestStreamRequest request, T obj)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            request.SetContentType(ContentTypes.ApplicationXml);
            WebResponse response = null;

            obj.SerializeToStreamUsingXml(streamForRequest => { response = request.Execute(stream: streamForRequest); });

            return(response);
        }