Last active
February 27, 2021 20:35
-
-
Save momvart/8a2e0f31e38edb89a375e771508bee0b to your computer and use it in GitHub Desktop.
A converter for `System.Text.Json` that recursively parse converts json to the inferred types. Uses `ExpandoObject` for objects.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Text.Json; | |
using System.Text.Json.Serialization; | |
using System.Dynamic; | |
public class ObjectToInferredTypesConverter : JsonConverter<object> | |
{ | |
public override object Read( | |
ref Utf8JsonReader reader, | |
Type typeToConvert, | |
JsonSerializerOptions options) => | |
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(), | |
JsonTokenType.StartObject => JsonSerializer.Deserialize<ExpandoObject>(ref reader, options), | |
JsonTokenType.StartArray => JsonSerializer.Deserialize<IList<object>>(ref reader, options), | |
_ => JsonDocument.ParseValue(ref reader).RootElement.Clone() | |
}; | |
public override void Write( | |
Utf8JsonWriter writer, | |
object objectToWrite, | |
JsonSerializerOptions options) => | |
throw new InvalidOperationException("Not meant for serialization."); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment