问题描述
在我的域对象中,我使用 Noda Time Instant 来表示与日期时间相关的数据。
在我的 REST API 中,我使用普通的 C# 类作为表示请求和响应合同的 DTO。它们使用默认的 ASP.NET Core 管道转换为 JSON。因为我想在那些 DTO 中使用与日期时间相关的数据,所以我想知道我应该使用哪种数据类型:
- string - 假设它是 ISO 8601 格式
- long - 假设它是 Unix Epoch
- 日期时间
- 即时 - 不知道如何正确地做到这一点
在这种情况下,最佳做法是什么?
解决方法
我会使用 ISO-8601 格式的字符串。实际上,这就是 JSON 序列化库(A_new = A.where(A.time.isin(B.time),drop=True)
、NodaTime.Serialization.JsonNet
)默认使用的内容 - 因此您应该能够在 .NET DTO 中继续使用 NodaTime.Serialization.SystemTextJson
,但该值仍然是转换为 JSON 中的字符串。
这取决于你使用什么样的野田时间。
如果使用区域格式,请使用ZonedDateTime,如果使用本地时间,请使用LocalDateTime作为类型。
并且根据您的需要,您可以使用字符串来获取json数据,这是一个演示,使用区域格式:
型号:
public class MyModel
{
public ZonedDateTime mytime { get; set; }
}
控制器:
public IActionResult Here(string myModel)
{
MyModel myModel1 = JsonConvert.DeserializeObject<MyModel>(myModel);
return new JsonResult("Ok");
}
查看:
@model MyModel
<input id="time1" value="@Model.mytime"/>
<button id="btn1">send</button>
@section Scripts
{
<script>
$("#btn1").click(function () {
var myData = { mytime: $("#time1").val()};
$.ajax({
type: "POST",url: "Home/Here",data: { myModel: JSON.stringify(myData) },dataType: "json"
});
});
</script>
}
结果: