A set of helper extension methods (on Stream) for working with streams. Particularly useful for interaction with an API through HttpClient.
Switch branches/tags
Nothing to show
Clone or download
KevinDockx Merge pull request #1 from tvanfosson/master
Fix incorrect GetHashCode implementation in test project and minor clean up to avoid allocations for unused values.
Latest commit 15b3cad Nov 28, 2018

README.md

Stream Extensions

A set of helper extension methods (on Stream) for working with streams. Particularly useful for interaction with an API through HttpClient. Includes 24 extension methods in total (sync & async where it makes sense, generic & non-generic) like SerializeToJsonAndWriteAsync<T>, SerializeToJsonAndWrite and ReadAndDeserializeFromJson<T>.

NuGet version

Installation (NuGet)

Install-Package Marvin.StreamExtensions

Usage

Add a using statement to import the extension methods

using Marvin.StreamExtensions

From this moment on any Stream object will have a set of additional extension methods available.

To deserialize the response of an HttpRequest from Json, using streams:

using (var response = await httpClient.SendAsync(request))
{
    var stream = await response.Content.ReadAsStreamAsync();
    var person = stream.ReadAndDeserializeFromJson<Person>();
}

To use a stream for sending data:

var person = new Person() { Name = "Lord Flashheart" };
var memoryContentStream = new MemoryStream();
memoryContentStream.SerializeToJsonAndWrite<Person>(person);

using (var request = new HttpRequestMessage(
    HttpMethod.Post,
    "http://api/test"))
    {
        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        using (var streamContent = new StreamContent(memoryContentStream))
        {
            streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            request.Content = streamContent;

            using (var response = await httpClient.SendAsync(request))
            {                
                // handle the response
            }
        }
    }