|
|
|
@ -12,33 +12,20 @@ public class ObjectToInferredTypesConverter : JsonConverter<object> |
|
|
|
public override object Read( |
|
|
|
ref Utf8JsonReader reader, |
|
|
|
Type typeToConvert, |
|
|
|
JsonSerializerOptions options) |
|
|
|
JsonSerializerOptions options) => (reader.TokenType switch |
|
|
|
{ |
|
|
|
return reader.TokenType switch |
|
|
|
{ |
|
|
|
JsonTokenType.True => true, |
|
|
|
JsonTokenType.False => false, |
|
|
|
JsonTokenType.Number when reader.TryGetInt64(out long l) => l, |
|
|
|
JsonTokenType.Number => reader.GetDouble(), |
|
|
|
JsonTokenType.String when reader.TryGetDateTime(out DateTime datetime) => datetime, |
|
|
|
JsonTokenType.String => reader.GetString()!, |
|
|
|
_ => JsonDocument.ParseValue(ref reader).RootElement.Clone() |
|
|
|
}; |
|
|
|
} |
|
|
|
JsonTokenType.True => true, |
|
|
|
JsonTokenType.False => false, |
|
|
|
JsonTokenType.Number when reader.TryGetInt64(out long l) => l, |
|
|
|
JsonTokenType.Number => reader.GetDouble(), |
|
|
|
JsonTokenType.String when reader.TryGetDateTime(out DateTime datetime) => datetime, |
|
|
|
JsonTokenType.String => reader.GetString(), |
|
|
|
_ => JsonDocument.ParseValue(ref reader).RootElement.Clone() |
|
|
|
})!; |
|
|
|
|
|
|
|
public override void Write( |
|
|
|
Utf8JsonWriter writer, |
|
|
|
object objectToWrite, |
|
|
|
JsonSerializerOptions options) |
|
|
|
{ |
|
|
|
var runtimeType = objectToWrite.GetType(); |
|
|
|
if (runtimeType == typeof(object)) |
|
|
|
{ |
|
|
|
writer.WriteStartObject(); |
|
|
|
writer.WriteEndObject(); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
JsonSerializer.Serialize(writer, objectToWrite, runtimeType, options); |
|
|
|
} |
|
|
|
JsonSerializerOptions options) => |
|
|
|
JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); |
|
|
|
} |
|
|
|
|