When using ASP.NET Core's AddValidation() in .NET 10, the [MaxLength] validation attribute is bypassed on properties that also have [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)].
Validation should work regardless of JsonIgnore attributes, since JsonIgnoreCondition.WhenWritingDefault only affects serialization output, not deserialization or validation.
Properties with [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] skip validation entirely, allowing invalid data through.
public class ValidationTestRequest
{
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
[MaxLength(10)]
public string? PropertyWithJsonIgnoreWhenWritingDefault { get; set; }
[MaxLength(10)]
public string? PropertyWithoutJsonIgnore { get; set; }
}var builder = WebApplication.CreateBuilder();
builder.Services.AddValidation();
var app = builder.Build();
app.MapPost("/test-validation", (ValidationTestRequest _) => Results.Ok());- POST with
{ "PropertyWithoutJsonIgnore": "ExceedsMaxLength" }returns 400 Bad Request (correct) - POST with
{ "PropertyWithJsonIgnoreWhenWritingDefault": "ExceedsMaxLength" }returns 200 OK (incorrect)
dotnet testExpected output:
MaxLengthValidation_ReturnsBadRequest_WhenValueExceedsLimit- PassMaxLengthValidation_ReturnsBadRequest_WhenPropertyHasJsonIgnoreWhenWritingDefault- Fail
- .NET 10
- Microsoft.AspNetCore.TestHost 10.0.0
- MSTest 4.0.1