using System.Text.Json.Serialization;
JsonSerializerOptions options = new()
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
TypeA result = JsonSerializer.Deserialize<TypeA>(jsonStr, options);
Console.WriteLine(JsonSerializer.Serialize(result, options));
public const int MyConstantInt = 42;
public const string MyConstantString = "Hello, World!";
[JsonConverter(typeof(NullableObjectConverter<MainInfo>))]
public MainInfo? MainInfo { get; set; }
public string? Name { get; set; }
public string? Address { get; set; }
public class NullableObjectConverter<T> : JsonConverter<T> where T : class
public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
if (reader.TokenType == JsonTokenType.StartObject)
using JsonDocument doc = JsonDocument.ParseValue(ref reader);
if (doc.RootElement.EnumerateObject().MoveNext())
return JsonSerializer.Deserialize<T>(doc.RootElement.GetRawText(), options);
return JsonSerializer.Deserialize<T>(ref reader, options);
public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options)
JsonSerializer.Serialize(writer, value, options);