@@ -3,16 +3,18 @@ namespace SqlStreamStore.HAL
33 using System . IO ;
44 using System . Threading . Tasks ;
55 using Halcyon . HAL ;
6- using Microsoft . IO ;
76 using Microsoft . Owin ;
87 using Newtonsoft . Json ;
98 using Newtonsoft . Json . Serialization ;
109 using SqlStreamStore . Streams ;
1110
1211 internal static class OwinContextExtensions
1312 {
14- private static readonly RecyclableMemoryStreamManager s_StreamManager
15- = new RecyclableMemoryStreamManager ( ) ;
13+ private static readonly JsonSerializer s_serializer = JsonSerializer . Create ( new JsonSerializerSettings
14+ {
15+ ContractResolver = new CamelCasePropertyNamesContractResolver ( ) ,
16+ TypeNameHandling = TypeNameHandling . None
17+ } ) ;
1618
1719 public static async Task WriteHalResponse ( this IOwinContext context , Response response )
1820 {
@@ -25,24 +27,14 @@ public static async Task WriteHalResponse(this IOwinContext context, Response re
2527 context . Response . Headers . AppendValues ( header . Key , header . Value ) ;
2628 }
2729
28- using ( var stream = s_StreamManager . GetStream ( ) )
29- using ( var writer = new StreamWriter ( stream ) )
30+ using ( var writer = new JsonTextWriter ( new StreamWriter ( context . Response . Body ) )
3031 {
31- using ( var jwriter = new JsonTextWriter ( writer ) { CloseOutput = false } )
32- {
33- var serializer = new JsonSerializer
34- {
35- ContractResolver = new CamelCasePropertyNamesContractResolver ( )
36- } ;
37-
38- serializer . Serialize ( jwriter , response . Hal ) ;
39-
40- jwriter . Flush ( ) ;
41- }
42-
43- stream . Position = 0 ;
32+ CloseOutput = false
33+ } )
34+ {
35+ await response . Hal . ToJObject ( s_serializer ) . WriteToAsync ( writer , context . Request . CallCancelled ) ;
4436
45- await stream . CopyToAsync ( context . Response . Body , 8192 , context . Request . CallCancelled ) ;
37+ await writer . FlushAsync ( context . Request . CallCancelled ) ;
4638 }
4739 }
4840
0 commit comments