11using System ;
2+ using System . Collections . Concurrent ;
23using System . IO ;
4+ using System . Linq . Expressions ;
35using System . Text ;
46using System . Threading ;
57using System . Threading . Tasks ;
@@ -14,6 +16,10 @@ namespace Nest
1416 internal class InternalSerializer : IElasticsearchSerializer
1517 {
1618 private static readonly Encoding ExpectedEncoding = new UTF8Encoding ( false ) ;
19+
20+ //we still support net45 so Task.Completed is not available
21+ private static readonly Task CompletedTask = Task . FromResult ( false ) ;
22+
1723 private readonly JsonSerializer _indentedSerializer ;
1824 internal JsonSerializer Serializer { get ; }
1925
@@ -66,8 +72,7 @@ public virtual void Serialize<T>(T data, Stream writableStream, SerializationFor
6672 }
6773 }
6874
69- //we still support net45 so Task.Completed is not available
70- private static readonly Task CompletedTask = Task . FromResult ( false ) ;
75+
7176 public Task SerializeAsync < T > ( T data , Stream stream , SerializationFormatting formatting = SerializationFormatting . Indented ,
7277 CancellationToken cancellationToken = default ( CancellationToken ) )
7378 {
@@ -77,13 +82,11 @@ public Task SerializeAsync<T>(T data, Stream stream, SerializationFormatting for
7782 return CompletedTask ;
7883 }
7984
80- public object Default ( Type type ) => type . IsValueType ( ) ? type . CreateInstance ( ) : null ;
81-
82- public virtual T Deserialize < T > ( Stream stream ) => ( T ) this . Deserialize ( typeof ( T ) , stream ) ;
85+ public T Deserialize < T > ( Stream stream ) => ( T ) this . Deserialize ( typeof ( T ) , stream ) ;
8386
84- public virtual object Deserialize ( Type type , Stream stream )
87+ public object Deserialize ( Type type , Stream stream )
8588 {
86- if ( stream == null ) return Default ( type ) ;
89+ if ( stream == null ) return type . DefaultValue ( ) ;
8790 using ( var streamReader = new StreamReader ( stream ) )
8891 using ( var jsonTextReader = new JsonTextReader ( streamReader ) )
8992 {
@@ -92,8 +95,9 @@ public virtual object Deserialize(Type type, Stream stream)
9295 }
9396 }
9497
95- public virtual async Task < T > DeserializeAsync < T > ( Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
98+ public async Task < T > DeserializeAsync < T > ( Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
9699 {
100+ if ( stream == null ) return default ( T ) ;
97101 using ( var streamReader = new StreamReader ( stream ) )
98102 using ( var jsonTextReader = new JsonTextReader ( streamReader ) )
99103 {
@@ -108,18 +112,26 @@ public virtual object Deserialize(Type type, Stream stream)
108112 }
109113 catch
110114 {
111- return await Task . FromResult ( default ( T ) ) . ConfigureAwait ( false ) ;
115+ return default ( T ) ;
112116 }
113117 }
114118 }
115119
116- public virtual async Task < object > DeserializeAsync ( Type type , Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
120+ public async Task < object > DeserializeAsync ( Type type , Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
117121 {
122+ if ( stream == null ) return type . DefaultValue ( ) ;
118123 using ( var streamReader = new StreamReader ( stream ) )
119124 using ( var jsonTextReader = new JsonTextReader ( streamReader ) )
120125 {
121- var token = await JToken . LoadAsync ( jsonTextReader , cancellationToken ) . ConfigureAwait ( false ) ;
122- return token . ToObject ( type , this . Serializer ) ;
126+ try
127+ {
128+ var token = await JToken . LoadAsync ( jsonTextReader , cancellationToken ) . ConfigureAwait ( false ) ;
129+ return token . ToObject ( type , this . Serializer ) ;
130+ }
131+ catch
132+ {
133+ return type . DefaultValue ( ) ;
134+ }
123135 }
124136 }
125137
0 commit comments