1
1
using System ;
2
- using System . Collections ;
3
2
using System . Collections . Generic ;
4
3
using System . Linq ;
5
4
using System . Reflection ;
12
11
13
12
namespace AnyOfTypes . Newtonsoft . Json ;
14
13
15
- public class AnyOfJsonConverter : JsonConverter
14
+ public class AnyOfJsonConverter ( bool ignoreCase = true ) : JsonConverter
16
15
{
17
- private readonly bool _ignoreCase ;
18
-
19
- public AnyOfJsonConverter ( bool ignoreCase = true )
20
- {
21
- _ignoreCase = ignoreCase ;
22
- }
23
-
24
- public override void WriteJson ( JsonWriter writer , object value , JsonSerializer serializer )
16
+ public override void WriteJson ( JsonWriter writer , object ? value , JsonSerializer serializer )
25
17
{
26
18
if ( value is null )
27
19
{
@@ -44,7 +36,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
44
36
/// - https://stackoverflow.com/questions/8030538/how-to-implement-custom-jsonconverter-in-json-net
45
37
/// - https://stackoverflow.com/a/59286262/255966
46
38
/// </summary>
47
- public override object ? ReadJson ( JsonReader reader , Type objectType , object existingValue , JsonSerializer serializer )
39
+ public override object ? ReadJson ( JsonReader reader , Type objectType , object ? existingValue , JsonSerializer serializer )
48
40
{
49
41
object ? value ;
50
42
switch ( reader . TokenType )
@@ -54,7 +46,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
54
46
break ;
55
47
56
48
case JsonToken . StartObject :
57
- value = FindBestObjectMatch ( reader , objectType ? . GetGenericArguments ( ) ?? new Type [ 0 ] , serializer ) ;
49
+ value = FindBestObjectMatch ( reader , objectType . GetGenericArguments ( ) ?? [ ] , serializer ) ;
58
50
break ;
59
51
60
52
case JsonToken . StartArray :
@@ -74,15 +66,15 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
74
66
return Activator . CreateInstance ( objectType , value ) ;
75
67
}
76
68
77
- private static object ? GetSimpleValue ( JsonReader reader , object existingValue )
69
+ private static object ? GetSimpleValue ( JsonReader reader , object ? existingValue )
78
70
{
79
71
var jValue = new JValue ( reader . Value ) ;
80
72
81
73
object ? value ;
82
74
switch ( reader . TokenType )
83
75
{
84
76
case JsonToken . String :
85
- value = ( string ) jValue ;
77
+ value = ( string ) jValue ! ;
86
78
break ;
87
79
88
80
case JsonToken . Date :
@@ -114,9 +106,9 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
114
106
return value ;
115
107
}
116
108
117
- private object ? FindBestArrayMatch ( JsonReader reader , Type ? typeToConvert , object existingValue , JsonSerializer serializer )
109
+ private object ? FindBestArrayMatch ( JsonReader reader , Type ? typeToConvert , object ? existingValue , JsonSerializer serializer )
118
110
{
119
- var enumerableTypes = typeToConvert ? . GetGenericArguments ( ) . Where ( t => typeof ( IEnumerable ) . IsAssignableFrom ( t ) ) . ToArray ( ) ?? new Type [ 0 ] ;
111
+ var enumerableTypes = typeToConvert ? . GetGenericArguments ( ) . Where ( t => t . IsAssignableFromIEnumerable ( ) ) . ToArray ( ) ?? [ ] ;
120
112
var elementTypes = enumerableTypes . Select ( t => t . GetElementTypeX ( ) ) . ToArray ( ) ;
121
113
122
114
var list = new List < object ? > ( ) ;
@@ -175,14 +167,14 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
175
167
Name = element . Key
176
168
} ;
177
169
178
- var val = element . Value . ToObject < object ? > ( ) ;
170
+ var val = element . Value ! . ToObject < object ? > ( ) ;
179
171
propertyDetails . PropertyType = val ? . GetType ( ) ;
180
172
propertyDetails . IsValueType = val ? . GetType ( ) . GetTypeInfo ( ) . IsValueType == true ;
181
173
182
174
properties . Add ( propertyDetails ) ;
183
175
}
184
176
185
- var bestType = MatchFinder . FindBestType ( _ignoreCase , properties , types ) ;
177
+ var bestType = MatchFinder . FindBestType ( ignoreCase , properties , types ) ;
186
178
if ( bestType is not null )
187
179
{
188
180
var target = Activator . CreateInstance ( bestType ) ;
@@ -200,7 +192,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
200
192
201
193
public override bool CanConvert ( Type objectType )
202
194
{
203
- return objectType . FullName . StartsWith ( "AnyOfTypes.AnyOf`" ) ;
195
+ return objectType . FullName ? . StartsWith ( "AnyOfTypes.AnyOf`" ) == true ;
204
196
}
205
197
206
198
private static JsonReader CopyReaderForObject ( JsonReader reader , JObject jObject )
0 commit comments