Skip to content

Commit ca2ebde

Browse files
authored
Merge pull request #205 from TurnerSoftware/system-text-json-serializer
Add System.Text.Json serializer
2 parents 238ce72 + 5717b9e commit ca2ebde

6 files changed

Lines changed: 97 additions & 0 deletions

File tree

CacheTower.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CacheTower.Serializers.Newt
4545
EndProject
4646
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CacheTower.Serializers.Protobuf", "src\CacheTower.Serializers.Protobuf\CacheTower.Serializers.Protobuf.csproj", "{436A6DF0-3DD8-4342-ACC5-EF0B8D5DF9DD}"
4747
EndProject
48+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CacheTower.Serializers.SystemTextJson", "src\CacheTower.Serializers.SystemTextJson\CacheTower.Serializers.SystemTextJson.csproj", "{4E94E3E8-3CC0-4F23-BFD7-157C8C386AFB}"
49+
EndProject
4850
Global
4951
GlobalSection(SolutionConfigurationPlatforms) = preSolution
5052
Debug|Any CPU = Debug|Any CPU
@@ -95,6 +97,10 @@ Global
9597
{436A6DF0-3DD8-4342-ACC5-EF0B8D5DF9DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
9698
{436A6DF0-3DD8-4342-ACC5-EF0B8D5DF9DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
9799
{436A6DF0-3DD8-4342-ACC5-EF0B8D5DF9DD}.Release|Any CPU.Build.0 = Release|Any CPU
100+
{4E94E3E8-3CC0-4F23-BFD7-157C8C386AFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
101+
{4E94E3E8-3CC0-4F23-BFD7-157C8C386AFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
102+
{4E94E3E8-3CC0-4F23-BFD7-157C8C386AFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
103+
{4E94E3E8-3CC0-4F23-BFD7-157C8C386AFB}.Release|Any CPU.Build.0 = Release|Any CPU
98104
EndGlobalSection
99105
GlobalSection(SolutionProperties) = preSolution
100106
HideSolutionNode = FALSE
@@ -111,6 +117,7 @@ Global
111117
{7830CC14-9FF6-4C56-BBFE-8AE9B6C7AFFA} = {FD0B0385-93AD-4DDF-9FE7-C7325B05B6B0}
112118
{06C698D6-51AB-4DA5-ABF3-5207115A38B9} = {E261C038-498E-4F5A-B2D7-B79AB36FFEB0}
113119
{436A6DF0-3DD8-4342-ACC5-EF0B8D5DF9DD} = {E261C038-498E-4F5A-B2D7-B79AB36FFEB0}
120+
{4E94E3E8-3CC0-4F23-BFD7-157C8C386AFB} = {E261C038-498E-4F5A-B2D7-B79AB36FFEB0}
114121
EndGlobalSection
115122
GlobalSection(ExtensibilityGlobals) = postSolution
116123
SolutionGuid = {F159337A-B345-49EE-8D58-A72EF1643174}

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,15 @@ PM> Install-Package CacheTower.Serializers.NewtonsoftJson
215215

216216
Uses [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json/) to perform serialization.
217217

218+
219+
### SystemTextJsonCacheSerializer
220+
221+
```powershell
222+
PM> Install-Package CacheTower.Serializers.SystemTextJson
223+
```
224+
225+
Uses [System.Text.Json](https://www.nuget.org/packages/System.Text.Json) to perform serialization.
226+
218227
### ProtobufCacheSerializer
219228

220229
```powershell
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netstandard2.0</TargetFramework>
5+
<Title>Newtonsoft.Json Serializer for Cache Tower</Title>
6+
<Description>Newtonsoft.Json cache serialization for Cache Tower</Description>
7+
<PackageTags>newtonsoft;json;$(PackageBaseTags)</PackageTags>
8+
<Authors>James Turner</Authors>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<PackageReference Include="System.Text.Json" Version="6.0.5" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<ProjectReference Include="..\CacheTower\CacheTower.csproj" />
17+
</ItemGroup>
18+
19+
</Project>
20+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.IO;
2+
using System.Text.Json;
3+
4+
namespace CacheTower.Serializers.SystemTextJson;
5+
6+
/// <summary>
7+
/// Allows serializing to and from JSON via System.Text.Json
8+
/// </summary>
9+
public class SystemTextJsonCacheSerializer : ICacheSerializer
10+
{
11+
private readonly JsonSerializerOptions? options;
12+
13+
private SystemTextJsonCacheSerializer() { }
14+
15+
/// <summary>
16+
/// An existing instance of <see cref="SystemTextJsonCacheSerializer"/>.
17+
/// </summary>
18+
public static SystemTextJsonCacheSerializer Instance { get; } = new();
19+
20+
/// <summary>
21+
/// Creates a new instance of <see cref="SystemTextJsonCacheSerializer"/> with the specified <paramref name="options"/>.
22+
/// </summary>
23+
public SystemTextJsonCacheSerializer(JsonSerializerOptions options)
24+
{
25+
this.options = options;
26+
}
27+
28+
/// <inheritdoc/>
29+
public void Serialize<T>(Stream stream, T? value)
30+
{
31+
JsonSerializer.Serialize(stream, value, options);
32+
}
33+
34+
/// <inheritdoc/>
35+
public T? Deserialize<T>(Stream stream)
36+
{
37+
return JsonSerializer.Deserialize<T>(stream, options);
38+
}
39+
}

tests/CacheTower.Tests/CacheTower.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<ProjectReference Include="..\..\src\CacheTower.Providers.FileSystem.Json\CacheTower.Providers.FileSystem.Json.csproj" />
2626
<ProjectReference Include="..\..\src\CacheTower.Providers.FileSystem.Protobuf\CacheTower.Providers.FileSystem.Protobuf.csproj" />
2727
<ProjectReference Include="..\..\src\CacheTower.Providers.Redis\CacheTower.Providers.Redis.csproj" />
28+
<ProjectReference Include="..\..\src\CacheTower.Serializers.SystemTextJson\CacheTower.Serializers.SystemTextJson.csproj" />
2829
<ProjectReference Include="..\..\src\CacheTower\CacheTower.csproj" />
2930
</ItemGroup>
3031

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using CacheTower.Serializers.SystemTextJson;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
4+
namespace CacheTower.Tests.Serializers
5+
{
6+
[TestClass]
7+
public class SystemTextJsonCacheSerializerTests : BaseSerializerTests<SystemTextJsonCacheSerializer>
8+
{
9+
[TestMethod]
10+
public void CacheEntrySerialization()
11+
{
12+
AssertCacheEntrySerialization(SystemTextJsonCacheSerializer.Instance);
13+
}
14+
15+
[TestMethod]
16+
public void AssertManifestSerialization()
17+
{
18+
AssertCacheEntrySerialization(SystemTextJsonCacheSerializer.Instance);
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)