Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit b83dbcf

Browse files
newtonsoft json 10 supports async properly so there is no need to buffer this in memory
1 parent 43c546f commit b83dbcf

3 files changed

Lines changed: 11 additions & 33 deletions

File tree

src/SqlStreamStore.HAL.Tests/packages.config

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/SqlStreamStore.HAL/OwinContextExtensions.cs

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

src/SqlStreamStore.HAL/SqlStreamStore.HAL.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
<PackageReference Include="KatanaNetStandard" Version="3.0.7" />
2323
<PackageReference Include="LibLog" Version="4.2.6" PrivateAssets="All" />
2424
<PackageReference Include="Microsoft.CSharp" Version="4.4.0" />
25-
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="1.2.2" />
2625
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
2726
<PackageReference Include="SqlStreamStore" Version="1.1.0" />
2827
<PackageReference Include="Tavis.UriTemplates" Version="1.1.1" />

0 commit comments

Comments
 (0)