@@ -122,12 +122,6 @@ private class DerivedUnionConverterInner<TType, TItem1, TItem2> : JsonConverter<
122122 public override void Write ( Utf8JsonWriter writer , TType value ,
123123 JsonSerializerOptions options )
124124 {
125- if ( value is null )
126- {
127- writer . WriteNullValue ( ) ;
128- return ;
129- }
130-
131125 if ( value . Item1 is not null )
132126 {
133127 JsonSerializer . Serialize ( writer , value . Item1 , value . Item1 . GetType ( ) , options ) ;
@@ -214,15 +208,30 @@ private class BucketsConverter<TBucket> : JsonConverter<Buckets<TBucket>>
214208 {
215209 public override Buckets < TBucket > ? Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
216210 {
217- // TODO - Read ahead to establish the type - For now, hardcoded for lists
211+ return reader . TokenType switch
212+ {
213+ JsonTokenType . Null => null ,
214+ JsonTokenType . StartArray => new ( JsonSerializer . Deserialize < IReadOnlyCollection < TBucket > > ( ref reader , options ) ) ,
215+ JsonTokenType . StartObject => new ( JsonSerializer . Deserialize < IReadOnlyDictionary < string , TBucket > > ( ref reader , options ) ) ,
216+ _ => throw new JsonException ( "Invalid bucket type" )
217+ } ;
218+ }
218219
219- var bucketType = typeToConvert . GetGenericArguments ( ) [ 0 ] ;
220+ public override void Write ( Utf8JsonWriter writer , Buckets < TBucket > value , JsonSerializerOptions options )
221+ {
222+ if ( value . Item1 is { } item1 )
223+ {
224+ JsonSerializer . Serialize ( writer , item1 , options ) ;
225+ return ;
226+ }
220227
221- var item = JsonSerializer . Deserialize ( ref reader , typeof ( IReadOnlyCollection < TBucket > ) , options ) ;
228+ if ( value . Item2 is { } item2 )
229+ {
230+ JsonSerializer . Serialize ( writer , item2 , options ) ;
231+ return ;
232+ }
222233
223- return ( Buckets < TBucket > ) Activator . CreateInstance ( typeof ( Buckets < > ) . MakeGenericType ( bucketType ) , item ) ;
234+ writer . WriteNullValue ( ) ;
224235 }
225-
226- public override void Write ( Utf8JsonWriter writer , Buckets < TBucket > value , JsonSerializerOptions options ) => throw new NotImplementedException ( ) ;
227236 }
228237}
0 commit comments