时间"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