Skip to content

Commit 9fbcb9f

Browse files
author
Oren (electricessence)
committed
Updated to more standard stream/async methods.
1 parent 7949d8c commit 9fbcb9f

5 files changed

Lines changed: 46 additions & 22 deletions

File tree

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

34
namespace Open.Serialization
45
{
56
public interface IDeserializeAsync
67
{
7-
ValueTask<T> DeserializeAsync<T>(string value);
8+
ValueTask<T> DeserializeAsync<T>(Stream stream);
89
}
910

1011
public interface IDeserializeAsync<T>
1112
{
12-
ValueTask<T> DeserializeAsync(string value);
13+
ValueTask<T> DeserializeAsync(Stream stream);
1314
}
1415
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
using System.Threading.Tasks;
1+
using System.IO;
2+
using System.Threading.Tasks;
23

34
namespace Open.Serialization
45
{
56
public interface ISerializeAsync
67
{
7-
ValueTask<string> SerializeAsync<T>(T item);
8+
ValueTask SerializeAsync<T>(Stream stream, T item);
89
}
910

1011
public interface ISerializeAsync<T>
1112
{
12-
ValueTask<string> SerializeAsync(T item);
13+
ValueTask SerializeAsync(Stream stream, T item);
1314
}
1415
}

Open.Serialization/Open.Serialization.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ 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.0</Version>
1819
</PropertyGroup>
1920

2021
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">

Open.Serialization/Serializer.cs

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

45
namespace Open.Serialization
56
{
67
public class Serializer<T> : SerializerBase<T>
78
{
8-
private readonly Func<T, string> _serializer;
99
private readonly Func<string, T> _deserializer;
10-
private readonly Func<T, ValueTask<string>> _serializerAsync;
11-
private readonly Func<string, ValueTask<T>> _deserializerAsync;
10+
private readonly Func<T, string> _serializer;
11+
private readonly Func<Stream, ValueTask<T>> _deserializerAsync;
12+
private readonly Func<Stream, T, ValueTask> _serializerAsync;
1213

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

2627
public override T Deserialize(string value) => _deserializer(value);
27-
public override ValueTask<T> DeserializeAsync(string value) => _deserializerAsync(value);
28+
public override ValueTask<T> DeserializeAsync(Stream stream) => _deserializerAsync(stream);
2829

2930
public override string Serialize(T item) => _serializer(item);
30-
public override ValueTask<string> SerializeAsync(T item) => _serializerAsync(item);
31+
public override ValueTask SerializeAsync(Stream stream, T item) => _serializerAsync(stream, item);
3132

3233
}
3334
}
Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,50 @@
1-
using System.Threading.Tasks;
1+
using System.IO;
2+
using System.Threading.Tasks;
23

34
namespace Open.Serialization
45
{
56
public abstract class SerializerBase : ISerializer, IAsyncSerializer
67
{
78
public abstract T Deserialize<T>(string value);
89

9-
public virtual ValueTask<T> DeserializeAsync<T>(string value)
10-
=> new ValueTask<T>(Deserialize<T>(value));
10+
public virtual async ValueTask<T> DeserializeAsync<T>(Stream stream)
11+
{
12+
string text;
13+
using(var reader = new StreamReader(stream))
14+
text = await reader.ReadToEndAsync();
15+
return Deserialize<T>(text);
16+
}
17+
1118

1219
public abstract string Serialize<T>(T item);
1320

14-
public virtual ValueTask<string> SerializeAsync<T>(T item)
15-
=> new ValueTask<string>(Serialize(item));
21+
public virtual async ValueTask SerializeAsync<T>(Stream stream, T item)
22+
{
23+
var text = Serialize(item);
24+
using var writer = new StreamWriter(stream);
25+
await writer.WriteAsync(text);
26+
}
1627
}
1728

1829
public abstract class SerializerBase<T> : ISerializer<T>, IAsyncSerializer<T>
1930
{
2031
public abstract T Deserialize(string value);
2132

22-
public virtual ValueTask<T> DeserializeAsync(string value)
23-
=> new ValueTask<T>(Deserialize(value));
33+
public virtual async ValueTask<T> DeserializeAsync(Stream stream)
34+
{
35+
string text;
36+
using (var reader = new StreamReader(stream))
37+
text = await reader.ReadToEndAsync();
38+
return Deserialize(text);
39+
}
2440

2541
public abstract string Serialize(T item);
2642

27-
public virtual ValueTask<string> SerializeAsync(T item)
28-
=> new ValueTask<string>(Serialize(item));
43+
public virtual async ValueTask SerializeAsync(Stream stream, T item)
44+
{
45+
var text = Serialize(item);
46+
using var writer = new StreamWriter(stream);
47+
await writer.WriteAsync(text);
48+
}
2949
}
3050
}

0 commit comments

Comments
 (0)