using System.Text.Json.Serialization;
public static void Main()
const string json = @"{""MyInt"":123,""MyBool"":true,""MyString"":""Hello""}";
var obj = JsonSerializer.Deserialize<ClassWithPrimitives>(json);
Console.WriteLine(123 == obj.MyInt);
Console.WriteLine(obj.MyBool);
Console.WriteLine("Hello" == obj.MyString);
private class ClassWithPrimitives
[JsonConverter(typeof(PrimitiveConverter))]
public int MyInt { get; set; }
[JsonConverter(typeof(PrimitiveConverter))]
public bool MyBool { get; set; }
[JsonConverter(typeof(PrimitiveConverter))]
public string MyString { get; set; }
private class PrimitiveConverter : JsonConverter<object>
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
if (reader.TokenType == JsonTokenType.True)
if (reader.TokenType == JsonTokenType.False)
if (reader.TokenType == JsonTokenType.Number)
if (reader.TryGetInt32(out int i))
return reader.GetDouble();
if (reader.TokenType == JsonTokenType.String)
if (reader.TryGetDateTime(out DateTime datetime))
return reader.GetString();
throw new JsonException();
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
throw new InvalidOperationException("Should not get here.");