Передача данных из C# приложения методом POST

154
17 февраля 2018, 20:10

Задача сериализовать класс в json и передать его POST'ом на сервер. Я написал код и он работает но у меня ощущение что я наделал много лишнего. Подскажите хорошую практику для решения моей задачи.

//package - сериализуемый объект который надо передать
JsonPackage package = new JsonPackage( userData ); 
DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer( typeof( JsonPackage ) );
WebRequest request = WebRequest.Create( "http://localhost:52733/set" );
request.ContentType = "application/json";
request.Method = "POST";
MemoryStream ms = new MemoryStream();
jsonFormatter.WriteObject( ms, package );
ms.Flush();
ms.Position = 0;
StreamReader sr = new StreamReader( ms );
string jsonString = sr.ReadToEnd();
StreamWriter sw = new StreamWriter( request.GetRequestStream() );
sw.Write( jsonString );
sr.Dispose();
sw.Dispose();
ms.Dispose();
request.GetResponse();
Answer 1

Не проверял, но думаю, что ваш код можно сократить до такого:

JsonPackage package = new JsonPackage(userData);
DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(JsonPackage));
WebRequest request = WebRequest.Create("http://localhost:52733/set");
request.ContentType = "application/json";
request.Method = "POST";
using (var stream = request.GetRequestStream())
    jsonFormatter.WriteObject(stream, package);
request.GetResponse();

Нет нужды создавать кучу потоков, достаточно взять нужный и сериализовать сразу в него. Ну и, обратите внимание, лучше использовать конструкцию using - она вызывает Dispose() в блоке finally, т.е. поток будет освобожден даже при ошибке.

READ ALSO
Получение информации из XML2

Получение информации из XML2

Добрый деньПытаюсь распарсить XML в Visual Studio, но не получается сделать структуру как это сделано в XML

214
C# получить ID обновлённой записи в MS ACCESS

C# получить ID обновлённой записи в MS ACCESS

Нужно в приложении на c# получить ID только что обновлённой записи в MS Access, тк

173
Квартал в DateTimePicker

Квартал в DateTimePicker

Как добавить квартал в DateTimePicker?

128
VS 2015 Юнит-Тесты. Время выполнения увеличилось в 20 раз

VS 2015 Юнит-Тесты. Время выполнения увеличилось в 20 раз

Проблема с VS 2015Со вчерашнего дня время на выполнение 350 юнит-тестов проекта на моей машине увеличилось с 2 до 40 минут

150