当我在内部使用 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 中使用日期时间相关数据,所以我想知道我应该使用哪种数据类型:
- string - 假设它是 ISO 8601 格式
- long - 假定它是 Unix Epoch
- 日期时间
- 即时 - 不确定如何正确地做到这一点
在这种情况下,什么是最佳做法?
那要看你用的是什么野田时间了。
如果使用区域格式,使用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.JsonNet
、NodaTime.Serialization.SystemTextJson
)默认使用的内容 - 因此您应该能够在 .NET DTO 中继续使用 Instant
,但是value 仍将转换为 JSON.
中的字符串
在我的域对象中,我使用 Noda Time Instant 来表示日期时间相关数据。
在我的 REST API 中,我使用纯 C# 类 作为代表请求和响应契约的 DTO。使用默认的 ASP.NET 核心管道将它们转换为 JSON。因为我想在那些 DTO 中使用日期时间相关数据,所以我想知道我应该使用哪种数据类型:
- string - 假设它是 ISO 8601 格式
- long - 假定它是 Unix Epoch
- 日期时间
- 即时 - 不确定如何正确地做到这一点
在这种情况下,什么是最佳做法?
那要看你用的是什么野田时间了。
如果使用区域格式,使用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.JsonNet
、NodaTime.Serialization.SystemTextJson
)默认使用的内容 - 因此您应该能够在 .NET DTO 中继续使用 Instant
,但是value 仍将转换为 JSON.