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

What data type I should use in DTOs when internally I'm using Noda Time Instant?

在我的域对象中,我使用 Noda Time Instant 来表示日期时间相关数据。

在我的 REST API 中,我使用纯 C# 类 作为代表请求和响应契约的 DTO。使用默认的 ASP.NET 核心管道将它们转换为 JSON。因为我想在那些 DTO 中使用日期时间相关数据,所以我想知道我应该使用哪种数据类型:

在这种情况下,什么是最佳做法?

那要看你用的是什么野田时间了。

如果使用区域格式,使用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>
}

结果:

我会使用 ISO-8601 格式的字符串。实际上,这就是 JSON 序列化库(NodaTime.Serialization.JsonNetNodaTime.Serialization.SystemTextJson)默认使用的内容 - 因此您应该能够在 .NET DTO 中继续使用 Instant,但是value 仍将转换为 JSON.

中的字符串