Skip to content

Commit 0115de5

Browse files
author
Oren (electricessence)
committed
Added non-generic deserialization.
1 parent 7f1f319 commit 0115de5

4 files changed

Lines changed: 35 additions & 9 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System;
2+
3+
namespace Open.Serialization
4+
{
5+
public interface IDeserializeObject
6+
{
7+
object Deserialize(string value, Type type);
8+
}
9+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
using System.IO;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
6+
namespace Open.Serialization
7+
{
8+
public interface IDeserializeObjectAsync
9+
{
10+
ValueTask<object> DeserializeAsync<T>(Stream stream, Type type, CancellationToken cancellationToken = default);
11+
}
12+
}

Open.Serialization/Open.Serialization.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +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.2.1</Version>
18+
<Version>1.3.0</Version>
1919

2020
<Nullable>enable</Nullable>
2121
</PropertyGroup>

Open.Serialization/Serializer.cs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ namespace Open.Serialization
88
public class Serializer<T> : SerializerBase<T>
99
{
1010
private readonly Func<string, T> _deserializer;
11-
private readonly Func<T, string> _serializer;
11+
private readonly Func<T, string>? _serializer;
1212
private readonly Func<Stream, CancellationToken, ValueTask<T>> _deserializerAsync;
1313
private readonly Func<Stream, T, CancellationToken, ValueTask> _serializerAsync;
1414

1515
public Serializer(
1616
Func<string, T> deserializer,
17-
Func<T, string> serializer = null,
18-
Func<Stream, CancellationToken, ValueTask<T>> deserializerAsync = null,
19-
Func<Stream, T, CancellationToken, ValueTask> serializerAsync = null)
17+
Func<T, string>? serializer = null,
18+
Func<Stream, CancellationToken, ValueTask<T>>? deserializerAsync = null,
19+
Func<Stream, T, CancellationToken, ValueTask>? serializerAsync = null)
2020
{
2121
// It's supported to instantiate a deserializer without a serializer.
2222
_deserializer = deserializer ?? throw new ArgumentNullException(nameof(deserializer));
@@ -25,11 +25,16 @@ public Serializer(
2525
_serializerAsync = serializerAsync ?? base.SerializeAsync;
2626
}
2727

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

31-
public override string Serialize(T item) => _serializer(item);
32-
public override ValueTask SerializeAsync(Stream stream, T item, CancellationToken cancellationToken = default) => _serializerAsync(stream, item, cancellationToken);
33+
public override string Serialize(T item) => _serializer == null
34+
? throw new NullReferenceException("No serializer function was supplied.")
35+
: _serializer(item);
36+
public override ValueTask SerializeAsync(Stream stream, T item, CancellationToken cancellationToken = default)
37+
=> _serializerAsync(stream, item, cancellationToken);
3338

3439
}
3540
}

0 commit comments

Comments
 (0)