Skip to content

Commit ecb984f

Browse files
author
Oren (electricessence)
committed
Improved async interface.
1 parent 45b1069 commit ecb984f

8 files changed

Lines changed: 36 additions & 28 deletions

File tree

Open.Serialization.Json.System/JsonSerializerFactory.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,19 @@ public JsonSerializerFactory(JsonSerializerOptions defaultOptions = null)
1212
_options = defaultOptions?.Clone() ?? DefaultOptions;
1313
}
1414

15-
JsonSerializerInternal _default;
1615
JsonSerializerInternal _caseSensitive;
1716
JsonSerializerInternal _ignoreCase;
1817

19-
protected override SerializerBase GetDeserializerInternal(bool caseSensitive)
20-
=> caseSensitive
21-
? LazyInitializer.EnsureInitialized(ref _caseSensitive,
22-
() => new JsonSerializerInternal(_options.Clone().SetPropertyNameCaseInsensitive(false)))
23-
: LazyInitializer.EnsureInitialized(ref _ignoreCase,
24-
() => new JsonSerializerInternal(_options.Clone().SetPropertyNameCaseInsensitive(true)));
25-
26-
protected override SerializerBase GetSerializerInternal(IJsonSerializationOptions options)
18+
public override IJsonSerializer GetSerializer(IJsonSerializationOptions options = null, bool caseSensitive = false)
2719
{
2820
if (options == null)
29-
return LazyInitializer.EnsureInitialized(ref _default, () => new JsonSerializerInternal(_options));
21+
{
22+
return caseSensitive
23+
? LazyInitializer.EnsureInitialized(ref _caseSensitive,
24+
() => new JsonSerializerInternal(_options.Clone().SetPropertyNameCaseInsensitive(false)))
25+
: LazyInitializer.EnsureInitialized(ref _ignoreCase,
26+
() => new JsonSerializerInternal(_options.Clone().SetPropertyNameCaseInsensitive(true)));
27+
}
3028

3129
var o = _options.Clone();
3230
o.IgnoreNullValues = options.OmitNull;

Open.Serialization.Json.System/JsonSerializerInternal.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
using System.Text.Json;
1+
using System.IO;
2+
using System.Text.Json;
3+
using System.Threading.Tasks;
24

35
namespace Open.Serialization.Json.System
46
{
5-
internal class JsonSerializerInternal : SerializerBase, IJsonSerializer
7+
internal class JsonSerializerInternal : JsonSerializerBase
68
{
79
readonly JsonSerializerOptions _options;
810
internal JsonSerializerInternal(JsonSerializerOptions options)
@@ -15,6 +17,9 @@ public override T Deserialize<T>(string value)
1517

1618
public override string Serialize<T>(T item)
1719
=> JsonSerializer.Serialize(item, _options);
20+
21+
public override ValueTask<T> DeserializeAsync<T>(Stream stream)
22+
=> JsonSerializer.DeserializeAsync<T>(stream, _options);
1823
}
1924

2025
internal class JsonSerializerInternal<T> : Serializer<T>, IJsonSerializer<T>

Open.Serialization.Json.System/Open.Serialization.Json.System.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Part of the "Open" set of libraries.
2121
</PropertyGroup>
2222

2323
<ItemGroup>
24-
<PackageReference Include="Open.Serialization.Json" Version="1.0.1" />
24+
<PackageReference Include="Open.Serialization.Json" Version="1.1.2" />
2525
<PackageReference Include="System.Text.Json" Version="4.6.0" />
2626
</ItemGroup>
2727

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
using System.IO;
2+
using System.Threading;
23
using System.Threading.Tasks;
34

45
namespace Open.Serialization
56
{
67
public interface IDeserializeAsync
78
{
8-
ValueTask<T> DeserializeAsync<T>(Stream stream);
9+
ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default);
910
}
1011

1112
public interface IDeserializeAsync<T>
1213
{
13-
ValueTask<T> DeserializeAsync(Stream stream);
14+
ValueTask<T> DeserializeAsync(Stream stream, CancellationToken cancellationToken = default);
1415
}
1516
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
using System.IO;
2+
using System.Threading;
23
using System.Threading.Tasks;
34

45
namespace Open.Serialization
56
{
67
public interface ISerializeAsync
78
{
8-
ValueTask SerializeAsync<T>(Stream stream, T item);
9+
ValueTask SerializeAsync<T>(Stream stream, T item, CancellationToken cancellationToken = default);
910
}
1011

1112
public interface ISerializeAsync<T>
1213
{
13-
ValueTask SerializeAsync(Stream stream, T item);
14+
ValueTask SerializeAsync(Stream stream, T item, CancellationToken cancellationToken = default);
1415
}
1516
}

Open.Serialization/Open.Serialization.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ Part of the "Open" set of libraries.</Description>
1515
<RepositoryUrl>https://github.com/electricessence/Open.Serialization</RepositoryUrl>
1616
<RepositoryType>git</RepositoryType>
1717
<PackageTags>serialization json</PackageTags>
18-
<Version>1.1.2</Version>
18+
<Version>1.2.0</Version>
1919
</PropertyGroup>
2020

2121
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
2222
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />
23+
<!--<PackageReference Include="System.Memory" Version="4.5.3" />-->
2324
</ItemGroup>
2425

2526
</Project>

Open.Serialization/Serializer.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.IO;
3+
using System.Threading;
34
using System.Threading.Tasks;
45

56
namespace Open.Serialization
@@ -8,14 +9,14 @@ public class Serializer<T> : SerializerBase<T>
89
{
910
private readonly Func<string, T> _deserializer;
1011
private readonly Func<T, string> _serializer;
11-
private readonly Func<Stream, ValueTask<T>> _deserializerAsync;
12-
private readonly Func<Stream, T, ValueTask> _serializerAsync;
12+
private readonly Func<Stream, CancellationToken, ValueTask<T>> _deserializerAsync;
13+
private readonly Func<Stream, T, CancellationToken, ValueTask> _serializerAsync;
1314

1415
public Serializer(
1516
Func<string, T> deserializer,
1617
Func<T, string> serializer = null,
17-
Func<Stream, ValueTask<T>> deserializerAsync = null,
18-
Func<Stream, T, ValueTask> serializerAsync = null)
18+
Func<Stream, CancellationToken, ValueTask<T>> deserializerAsync = null,
19+
Func<Stream, T, CancellationToken, ValueTask> serializerAsync = null)
1920
{
2021
// It's supported to instantiate a deserializer without a serializer.
2122
_deserializer = deserializer ?? throw new ArgumentNullException(nameof(deserializer));
@@ -25,10 +26,10 @@ public Serializer(
2526
}
2627

2728
public override T Deserialize(string value) => _deserializer(value);
28-
public override ValueTask<T> DeserializeAsync(Stream stream) => _deserializerAsync(stream);
29+
public override ValueTask<T> DeserializeAsync(Stream stream, CancellationToken cancellationToken = default) => _deserializerAsync(stream, cancellationToken);
2930

3031
public override string Serialize(T item) => _serializer(item);
31-
public override ValueTask SerializeAsync(Stream stream, T item) => _serializerAsync(stream, item);
32+
public override ValueTask SerializeAsync(Stream stream, T item, CancellationToken cancellationToken = default) => _serializerAsync(stream, item, cancellationToken);
3233

3334
}
3435
}

Open.Serialization/SerializerBase.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using System.Threading;
23
using System.Threading.Tasks;
34

45
namespace Open.Serialization
@@ -7,7 +8,7 @@ public abstract class SerializerBase : ISerializer, IAsyncSerializer
78
{
89
public abstract T Deserialize<T>(string value);
910

10-
public virtual async ValueTask<T> DeserializeAsync<T>(Stream stream)
11+
public virtual async ValueTask<T> DeserializeAsync<T>(Stream stream, CancellationToken cancellationToken = default)
1112
{
1213
string text;
1314
using(var reader = new StreamReader(stream))
@@ -17,7 +18,7 @@ public virtual async ValueTask<T> DeserializeAsync<T>(Stream stream)
1718

1819
public abstract string Serialize<T>(T item);
1920

20-
public virtual async ValueTask SerializeAsync<T>(Stream stream, T item)
21+
public virtual async ValueTask SerializeAsync<T>(Stream stream, T item, CancellationToken cancellationToken = default)
2122
{
2223
var text = Serialize(item);
2324
using var writer = new StreamWriter(stream);
@@ -32,7 +33,7 @@ public abstract class SerializerBase<T> : ISerializer<T>, IAsyncSerializer<T>
3233
{
3334
public abstract T Deserialize(string value);
3435

35-
public virtual async ValueTask<T> DeserializeAsync(Stream stream)
36+
public virtual async ValueTask<T> DeserializeAsync(Stream stream, CancellationToken cancellationToken = default)
3637
{
3738
string text;
3839
using (var reader = new StreamReader(stream))
@@ -42,7 +43,7 @@ public virtual async ValueTask<T> DeserializeAsync(Stream stream)
4243

4344
public abstract string Serialize(T item);
4445

45-
public virtual async ValueTask SerializeAsync(Stream stream, T item)
46+
public virtual async ValueTask SerializeAsync(Stream stream, T item, CancellationToken cancellationToken = default)
4647
{
4748
var text = Serialize(item);
4849
using var writer = new StreamWriter(stream);

0 commit comments

Comments
 (0)