13
13
14
14
namespace ArangoDB . Client . Http
15
15
{
16
+ #if ! NETSTANDARD1_1
16
17
// from http://stackoverflow.com/questions/25335897/using-json-net-to-serialize-object-into-httpclients-response-stream
17
18
public class JsonContent : HttpContent
18
19
{
19
20
IArangoDatabase db ;
20
21
21
22
object data { get ; set ; }
22
- public JsonContent ( IArangoDatabase db , object data )
23
+ public JsonContent ( IArangoDatabase db , object data )
23
24
{
24
25
this . db = db ;
25
26
this . data = data ;
@@ -43,15 +44,53 @@ protected override async Task SerializeToStreamAsync(Stream stream, TransportCon
43
44
var jsonWriter = new JsonTextWriter ( streamWriter ) ;
44
45
var serializer = docSerializer . CreateJsonSerializer ( ) ;
45
46
serializer . Serialize ( jsonWriter , data ) ;
47
+
46
48
await streamWriter . FlushAsync ( ) . ConfigureAwait ( false ) ;
47
49
}
48
50
}
49
-
51
+
50
52
protected override bool TryComputeLength ( out long length )
51
53
{
52
- //we don't know. can't be computed up-front
53
54
length = - 1 ;
54
55
return false ;
55
56
}
56
57
}
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
57
96
}
0 commit comments