You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1中JsonConvert.DeserializeObject的MaxLength属性不生效问题

问题根因

[Required]、[MaxLength]属于System.ComponentModel.DataAnnotations命名空间下的数据校验特性,仅会在ASP.NET Core自带的模型绑定流程中自动触发。你手动调用JsonConvert.DeserializeObject反序列化时,Newtonsoft.Json默认不会解析执行这类校验注解,因此规则不会生效。

解决方案


方案1:反序列化后手动执行校验

调用.NET内置的Validator工具类主动触发校验,代码示例:

// 原有反序列化逻辑保持不变
var model = JsonConvert.DeserializeObject<MyModel>(requestBody);

// 手动执行校验逻辑
var validationContext = new ValidationContext(model);
var validationResults = new List<ValidationResult>();
// 第四个参数需设为true,才会校验所有属性的注解规则
bool isValid = Validator.TryValidateObject(model, validationContext, validationResults, validateAllProperties: true);

if (!isValid)
{
    // 校验失败后的处理逻辑:可返回错误、抛出异常等
    var errors = validationResults.Select(r => r.ErrorMessage);
    throw new ValidationException(string.Join(" | ", errors));
}

方案2:使用ASP.NET Core原生模型绑定(推荐)

如果是在ASP.NET Core接口场景中处理请求,无需手动读取请求体反序列化,直接在Action参数中声明模型即可,框架会自动完成反序列化+校验:

[HttpPost]
public IActionResult YourApi([FromBody] MyModel model)
{
    // 直接读取ModelState判断校验结果
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    // 执行业务逻辑
}

该方案是官方推荐的请求参数处理方式,无需额外编写反序列化和校验代码,性能和可维护性更高。


内容的提问来源于stack exchange,提问作者arunraj770

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:06:03