mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-05-06 21:26:06 +00:00
53 lines
1.5 KiB
C#
53 lines
1.5 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
|
|
namespace Octokit.Internal
|
|
{
|
|
/// <summary>
|
|
/// Responsible for serializing the request and response as JSON and
|
|
/// adding the proper JSON response header.
|
|
/// </summary>
|
|
public class JsonHttpPipeline
|
|
{
|
|
readonly IJsonSerializer _serializer;
|
|
|
|
public JsonHttpPipeline() : this(new SimpleJsonSerializer())
|
|
{
|
|
}
|
|
|
|
public JsonHttpPipeline(IJsonSerializer serializer)
|
|
{
|
|
Ensure.ArgumentNotNull(serializer, "serializer");
|
|
|
|
_serializer = serializer;
|
|
}
|
|
|
|
public void SerializeRequest(IRequest request)
|
|
{
|
|
Ensure.ArgumentNotNull(request, "request");
|
|
|
|
if (!request.Headers.ContainsKey("Accept"))
|
|
{
|
|
request.Headers["Accept"] = "application/vnd.github.v3+json; charset=utf-8";
|
|
}
|
|
|
|
if (request.Method == HttpMethod.Get || request.Body == null) return;
|
|
if (request.Body is string || request.Body is Stream) return;
|
|
|
|
request.Body = _serializer.Serialize(request.Body);
|
|
}
|
|
|
|
public void DeserializeResponse<T>(IResponse<T> response)
|
|
{
|
|
Ensure.ArgumentNotNull(response, "response");
|
|
|
|
if (response.ContentType != null && response.ContentType.Equals("application/json", StringComparison.Ordinal))
|
|
{
|
|
var json = _serializer.Deserialize<T>(response.Body);
|
|
response.BodyAsObject = json;
|
|
}
|
|
}
|
|
}
|
|
}
|