@@ -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