@@ -122,12 +122,6 @@ private class DerivedUnionConverterInner<TType, TItem1, TItem2> : JsonConverter<
122
122
public override void Write ( Utf8JsonWriter writer , TType value ,
123
123
JsonSerializerOptions options )
124
124
{
125
- if ( value is null )
126
- {
127
- writer . WriteNullValue ( ) ;
128
- return ;
129
- }
130
-
131
125
if ( value . Item1 is not null )
132
126
{
133
127
JsonSerializer . Serialize ( writer , value . Item1 , value . Item1 . GetType ( ) , options ) ;
@@ -214,15 +208,30 @@ private class BucketsConverter<TBucket> : JsonConverter<Buckets<TBucket>>
214
208
{
215
209
public override Buckets < TBucket > ? Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
216
210
{
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
+ }
218
219
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
+ }
220
227
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
+ }
222
233
223
- return ( Buckets < TBucket > ) Activator . CreateInstance ( typeof ( Buckets < > ) . MakeGenericType ( bucketType ) , item ) ;
234
+ writer . WriteNullValue ( ) ;
224
235
}
225
-
226
- public override void Write ( Utf8JsonWriter writer , Buckets < TBucket > value , JsonSerializerOptions options ) => throw new NotImplementedException ( ) ;
227
236
}
228
237
}
0 commit comments