Skip to content

Commit ea7c794

Browse files
authored
Fix AnyOfJsonConverter (string and string list) (#23)
1 parent 3011db6 commit ea7c794

File tree

17 files changed

+228
-288
lines changed

17 files changed

+228
-288
lines changed

AnyOf Solution.sln.DotSettings

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
<s:Boolean x:Key="/Default/UserDictionary/Words/=Castable/@EntryIndexedValue">True</s:Boolean>
23
<s:Boolean x:Key="/Default/UserDictionary/Words/=Ordinalize/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

examples/ClassLibrary/ClassLibrary1.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="AnyOf.SourceGenerator" Version="0.0.20" />
9+
<PackageReference Include="AnyOf.SourceGenerator" Version="0.4.0" />
1010
</ItemGroup>
1111

1212
</Project>

examples/ClassLibrary2/ClassLibrary2.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="AnyOf.SourceGenerator" Version="0.0.20" />
9+
<PackageReference Include="AnyOf.SourceGenerator" Version="0.4.0" />
1010
</ItemGroup>
1111

1212
</Project>

examples/ClassLibraryCommon/ClassLibraryCommon.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="AnyOf.SourceGenerator" Version="0.0.18" />
9+
<PackageReference Include="AnyOf.SourceGenerator" Version="0.4.0" />
1010
</ItemGroup>
1111

1212
</Project>
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<OutputType>Exe</OutputType>
4-
<TargetFramework>net5.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
</PropertyGroup>
6-
<ItemGroup>
7-
<ProjectReference Include="..\..\src\AnyOf\AnyOf.csproj" />
8-
</ItemGroup>
9-
106
<!--<ItemGroup>
11-
<PackageReference Include="AnyOf" Version="0.0.20" />
7+
<ProjectReference Include="..\..\src\AnyOf\AnyOf.csproj" />
128
</ItemGroup>-->
139

10+
<ItemGroup>
11+
<PackageReference Include="AnyOf" Version="0.4.0" />
12+
</ItemGroup>
13+
1414
</Project>

examples/ConsoleAppUsesClassLibraries/ConsoleAppUsesClassLibraries.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<OutputType>Exe</OutputType>
4-
<TargetFramework>net5.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
55
</PropertyGroup>
66
<ItemGroup>
77
<ProjectReference Include="..\ClassLibrary2\ClassLibrary2.csproj" />

src/AnyOf.Newtonsoft.Json/AnyOf.Newtonsoft.Json.csproj

+1-5
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
<RootNamespace>AnyOfTypes.Newtonsoft.Json</RootNamespace>
1010
</PropertyGroup>
1111

12-
<ItemGroup>
13-
<Compile Remove="Class1.cs" />
14-
</ItemGroup>
15-
1612
<ItemGroup>
1713
<Compile Include="..\AnyOf.System.Text.Json\Extensions\ReflectionHelpers.cs" Link="Extensions\ReflectionHelpers.cs" />
1814
<Compile Include="..\AnyOf.System.Text.Json\Matcher\MatchFinder.cs" Link="Matcher\MatchFinder.cs" />
@@ -22,7 +18,7 @@
2218
</ItemGroup>
2319

2420
<ItemGroup>
25-
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
21+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
2622
<PackageReference Include="TinyMapper" Version="3.0.3" />
2723
</ItemGroup>
2824

src/AnyOf.Newtonsoft.Json/AnyOfJsonConverter.cs

+11-19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections;
32
using System.Collections.Generic;
43
using System.Linq;
54
using System.Reflection;
@@ -12,16 +11,9 @@
1211

1312
namespace AnyOfTypes.Newtonsoft.Json;
1413

15-
public class AnyOfJsonConverter : JsonConverter
14+
public class AnyOfJsonConverter(bool ignoreCase = true) : JsonConverter
1615
{
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)
2517
{
2618
if (value is null)
2719
{
@@ -44,7 +36,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
4436
/// - https://stackoverflow.com/questions/8030538/how-to-implement-custom-jsonconverter-in-json-net
4537
/// - https://stackoverflow.com/a/59286262/255966
4638
/// </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)
4840
{
4941
object? value;
5042
switch (reader.TokenType)
@@ -54,7 +46,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
5446
break;
5547

5648
case JsonToken.StartObject:
57-
value = FindBestObjectMatch(reader, objectType?.GetGenericArguments() ?? new Type[0], serializer);
49+
value = FindBestObjectMatch(reader, objectType.GetGenericArguments() ?? [], serializer);
5850
break;
5951

6052
case JsonToken.StartArray:
@@ -74,15 +66,15 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
7466
return Activator.CreateInstance(objectType, value);
7567
}
7668

77-
private static object? GetSimpleValue(JsonReader reader, object existingValue)
69+
private static object? GetSimpleValue(JsonReader reader, object? existingValue)
7870
{
7971
var jValue = new JValue(reader.Value);
8072

8173
object? value;
8274
switch (reader.TokenType)
8375
{
8476
case JsonToken.String:
85-
value = (string)jValue;
77+
value = (string)jValue!;
8678
break;
8779

8880
case JsonToken.Date:
@@ -114,9 +106,9 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
114106
return value;
115107
}
116108

117-
private object? FindBestArrayMatch(JsonReader reader, Type? typeToConvert, object existingValue, JsonSerializer serializer)
109+
private object? FindBestArrayMatch(JsonReader reader, Type? typeToConvert, object? existingValue, JsonSerializer serializer)
118110
{
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() ?? [];
120112
var elementTypes = enumerableTypes.Select(t => t.GetElementTypeX()).ToArray();
121113

122114
var list = new List<object?>();
@@ -175,14 +167,14 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
175167
Name = element.Key
176168
};
177169

178-
var val = element.Value.ToObject<object?>();
170+
var val = element.Value!.ToObject<object?>();
179171
propertyDetails.PropertyType = val?.GetType();
180172
propertyDetails.IsValueType = val?.GetType().GetTypeInfo().IsValueType == true;
181173

182174
properties.Add(propertyDetails);
183175
}
184176

185-
var bestType = MatchFinder.FindBestType(_ignoreCase, properties, types);
177+
var bestType = MatchFinder.FindBestType(ignoreCase, properties, types);
186178
if (bestType is not null)
187179
{
188180
var target = Activator.CreateInstance(bestType);
@@ -200,7 +192,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
200192

201193
public override bool CanConvert(Type objectType)
202194
{
203-
return objectType.FullName.StartsWith("AnyOfTypes.AnyOf`");
195+
return objectType.FullName?.StartsWith("AnyOfTypes.AnyOf`") == true;
204196
}
205197

206198
private static JsonReader CopyReaderForObject(JsonReader reader, JObject jObject)

src/AnyOf.Newtonsoft.Json/Class1.cs

-78
This file was deleted.

0 commit comments

Comments
 (0)