时间"2024-08-28 11:50:31"不能用DateTime接收?
8/28/2024 30

今天遇到一个参数400的问题,接收到的对象参数为空;经排查,是时间格式问题。
首先,我们来看一下这段代码:

csharp 复制代码
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    [HttpPost]
    public IResult Test([FromBody] TestModel model)
    {
        return Results.Ok(model);
    }
}

public class TestModel
{
    public DateTime StartTime { get; set; }
}

前端传入StartTime="2024-08-28 11:50:31",调用/api/values响应了400,这时我就很疑惑,难道这不是一个时间格式码?
然后我将[FromBody]换成了[FromQuery],结果api能正常调用。
这时我就猜测,可能是序列化时不支持这种格式的时间字符串,于是我用微软自带库System.Text.Json写了一段反序列化代码:

csharp 复制代码
var model = JsonSerializer.Deserialize<TestModel>("{\"startTime\":\"2024-08-28 11:50:31\"}");

果然,在.net7.x版本会抛错,.net8.x版本会转成0001-01-01;并且我将api默认序列化库改成NewtonsoftJson后,错误消除;
所以确实是微软自带序列化库不支持这种格式的时间字符串。


Comments