using System.Text.Json.Serialization;
public static void Main()
string jsonOne = @"{ ""values"": ""abc"" }";
TestClass jsonObjOne = JsonSerializer.Deserialize<TestClass>(jsonOne);
Console.WriteLine(JsonSerializer.Serialize(jsonObjOne.StringValue));
string jsonTwo = @"{ ""values"": [1,2,3] }";
TestClass jsonObjTwo = JsonSerializer.Deserialize<TestClass>(jsonTwo);
Console.WriteLine(JsonSerializer.Serialize(jsonObjTwo.IntegerValues));
public class TestClassConverter : JsonConverter<TestClass>
public override TestClass Read(
ref Utf8JsonReader reader,
JsonSerializerOptions options)
TestClass value = new TestClass();
JsonElement root = JsonElement.ParseValue(ref reader);
JsonElement values = root.GetProperty("values");
switch (values.ValueKind)
case JsonValueKind.String:
value.StringValue = values.ToString();
case JsonValueKind.Array:
value.IntegerValues = JsonSerializer.Deserialize<int[]>(values);
throw new JsonException("Unsupported values type");
public override void Write(
JsonSerializerOptions options) =>
writer.WriteStringValue(value.ToString());
[JsonConverter(typeof(TestClassConverter))]
[JsonPropertyName("values")]
public JsonElement? values { get; set; } = null;
public string StringValue
if (values.HasValue && values.Value.ValueKind == JsonValueKind.String)
return values.Value.ToString();
public int[] IntegerValues
if (values.HasValue && values.Value.ValueKind == JsonValueKind.Array)
return values.Value.Deserialize<int[]>();