当我在内部使用 Noda Time Instant 时,我应该在 DTO 中使用什么数据类型?

问题描述

在我的域对象中,我使用 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>
}

结果:

enter image description here