Ich implementiere einen benutzerdefinierten JSONCONVERTER, der nullbare Typen behandelt. Insbesondere verwandelt es leere Saiten und leere Arrays in Null.public class NullableConverterFactory : JsonConverterFactory
{
public override bool CanConvert(Type typeToConvert)
{
return Nullable.GetUnderlyingType(typeToConvert) is not null;
}
public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options) =>
(JsonConverter)Activator.CreateInstance(
typeof(NullableConverter)
.MakeGenericType([Nullable.GetUnderlyingType(typeToConvert)!]),
BindingFlags.Instance | BindingFlags.Public,
binder: null,
args: [options],
culture: null)!;
private class NullableConverter : JsonConverter
{
public NullableConverter(JsonSerializerOptions options)
{
}
public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.Null) {
return default;
}
if (reader.TokenType == JsonTokenType.StartArray) {
if (reader.Read() && reader.TokenType == JsonTokenType.EndArray) {
return default;
}
throw new JsonException();
}
if (reader.TokenType == JsonTokenType.String &&
string.IsNullOrEmpty(reader.GetString())) {
return default;
}
return JsonSerializer.Deserialize(ref reader, options);
}
public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options)
{
JsonSerializer.Serialize(writer, value, options);
}
}
}
< /code>
Ich erhalte diese Ausnahme: < /p>
InvalidOperationException: The converter 'OrisApi.JsonConverters.NullableConverterFactory+NullableConverter`1[System.Int32]' handles type 'System.Int32' but is being asked to convert type 'System.Nullable`1[System.Int32]'. Either create a separate converter for type 'System.Nullable`1[System.Int32]' or change the converter's 'CanConvert' method to only return 'true' for a single type.
< /code>
Ich bin ratlos, was dies bedeutet. Der Zweck des Konverters ist es, Nullables zu konvertieren, aber die Ausnahme besagt, dass er Nullables nicht konvertieren kann. Der fragliche Int32 ist eine leere Zeichenfolge ("") im JSON. Was passiert hier?
Der Konverter behandelt INT32, wird jedoch gebeten, nullierbar zu konvertieren ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post