Skip to content

Commit 29c36b6

Browse files
committed
added alternate JsonContent for .NET Core
1 parent 60d5551 commit 29c36b6

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

src/ArangoDB.Client/Http/HttpConnection.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public async Task<HttpResponseMessage> SendCommandAsync(HttpMethod method, Uri u
106106
requestMessage.Content = new JsonContent(db, data);
107107
if (onStreamReady != null)
108108
requestMessage.Content = new GenericStreamContent(db, onStreamReady);
109-
109+
110110
var responseMessage = await httpClient.SendAsync(requestMessage).ConfigureAwait(false);
111111

112112
if (db.LoggerAvailable)

src/ArangoDB.Client/Http/JsonContent.cs

+42-3
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313

1414
namespace ArangoDB.Client.Http
1515
{
16+
#if !NETSTANDARD1_1
1617
// from http://stackoverflow.com/questions/25335897/using-json-net-to-serialize-object-into-httpclients-response-stream
1718
public class JsonContent : HttpContent
1819
{
1920
IArangoDatabase db;
2021

2122
object data { get; set; }
22-
public JsonContent(IArangoDatabase db,object data)
23+
public JsonContent(IArangoDatabase db, object data)
2324
{
2425
this.db = db;
2526
this.data = data;
@@ -43,15 +44,53 @@ protected override async Task SerializeToStreamAsync(Stream stream, TransportCon
4344
var jsonWriter = new JsonTextWriter(streamWriter);
4445
var serializer = docSerializer.CreateJsonSerializer();
4546
serializer.Serialize(jsonWriter, data);
47+
4648
await streamWriter.FlushAsync().ConfigureAwait(false);
4749
}
4850
}
49-
51+
5052
protected override bool TryComputeLength(out long length)
5153
{
52-
//we don't know. can't be computed up-front
5354
length = -1;
5455
return false;
5556
}
5657
}
58+
#else
59+
public class JsonContent : HttpContent
60+
{
61+
private readonly MemoryStream _Stream = new MemoryStream();
62+
63+
public JsonContent(IArangoDatabase db, object value)
64+
{
65+
var jw = new JsonTextWriter(new StreamWriter(_Stream));
66+
67+
var jObject = value as JObject;
68+
if (jObject != null)
69+
{
70+
jObject.WriteTo(jw);
71+
}
72+
else
73+
{
74+
var docSerializer = new DocumentSerializer(db);
75+
var serializer = docSerializer.CreateJsonSerializer();
76+
serializer.Serialize(jw, value);
77+
}
78+
jw.Flush();
79+
_Stream.Position = 0;
80+
}
81+
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
82+
{
83+
_Stream.CopyTo(stream);
84+
var tcs = new TaskCompletionSource<object>();
85+
tcs.SetResult(null);
86+
return tcs.Task;
87+
}
88+
89+
protected override bool TryComputeLength(out long length)
90+
{
91+
length = _Stream.Length;
92+
return true;
93+
}
94+
}
95+
#endif
5796
}

0 commit comments

Comments
 (0)