How to get JsonSerializer.Deserialize to not leave objects as JsonElement? [duplicate]

1 day ago 2
ARTICLE AD BOX

To do this, you need to use a custom converter. Something like this would work:

public class ObjectNativeTypeConverter : 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()!, _ => JsonDocument.ParseValue(ref reader).RootElement.Clone() }; } public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) { // An exercise for you if you need it throw new NotImplementedException(); } }

(Note: this is taken almost verbatim from the official docs)

And use it like this:

var options = new JsonSerializerOptions(); options.Converters.Add(new ObjectNativeTypeConverter()); var obj = JsonSerializer.Deserialize<Dictionary<string, object>>(input, options);

answered Aug 15, 2022 at 15:39

DavidG's user avatar

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.

Read Entire Article