You should use JsonConverter :
public class BoolConverter : JsonConverter<bool>
{
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
switch (reader.TokenType)
{
case JsonTokenType.True: return true;
case JsonTokenType.False: return false;
case JsonTokenType.String:
{
var value = reader.GetString();
if (value.Equals("true", StringComparison.OrdinalIgnoreCase)
|| value.Equals("yes", StringComparison.OrdinalIgnoreCase)
|| value.Equals("1", StringComparison.Ordinal))
{
return true;
}
if (value.Equals("false", StringComparison.OrdinalIgnoreCase)
|| value.Equals("no", StringComparison.OrdinalIgnoreCase)
|| value.Equals("0", StringComparison.Ordinal))
{
return false;
}
throw new NotSupportedException($"`{value}` can't be converted to `bool`.");
}
case JsonTokenType.Number:
{
return reader.TryGetInt64(out long l) ? Convert.ToBoolean(l) :
reader.TryGetDouble(out double d) && Convert.ToBoolean(d);
}
default: throw new NotSupportedException(" can't be converted to `bool`.");
}
}
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
{
writer.WriteBooleanValue(value);
}
And you should add your converter in startup:
builder.Services.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.Converters
.Add(new BoolConverter()));