如何将 JSON DateTime 格式从 API 调用转换为 C# DateTime 格式
How do I convert a JSON DateTime format to a C# DateTime format from an API call
我目前正在构建一个检索 API 数据并将其保存到数据库中的项目。除了 API 中的 DateTime 值外,一切正常。我有一个 class,它使用 RestSharp 获取 API 数据,然后它使用 NewtonSoft.Json 将 API 数据反序列化为 JSON 格式,然后将其存储到临时 DTO class 文件。这是API方法。
public static void getAllRequestData()
{
var client = new RestClient("[My API URL]");
var request = new RestRequest();
var response = client.Execute(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
string rawResponse = response.Content;
AllRequests.Rootobject result = JsonConvert.DeserializeObject<AllRequests.Rootobject>(rawResponse);
}
}
现在是临时存储已转换 JSON 数据的 DTO 文件 (AllRequests)。
public class AllRequests
{
public class Rootobject
{
public Operation Operation { get; set; }
}
public class Operation
{
public Result Result { get; set; }
public Detail[] Details { get; set; }
}
public class Result
{
public string Message { get; set; }
public string Status { get; set; }
}
public class Detail
{
[Key]
public int Id { get; set; }
public string Requester { get; set; }
public string WorkOrderId { get; set; }
public string AccountName { get; set; }
public string CreatedBy { get; set; }
public string Subject { get; set; }
public string Technician { get; set; }
public string IsOverDue { get; set; }
public string DueByTime { get; set; }
public string Priority { get; set; }
public string CreatedTime { get; set; }
public string IgnoreRequest { get; set; }
public string Status { get; set; }
}
}
详细信息中我希望成为日期时间格式的代码行是“DueByTime”和“CreatedTime”,而不是字符串值。目前他们只在字符串中保存 JSON 格式的 DateTime 值,例如“1477394860065”。
我试过将“public string CreatedTime { get; set; }” 改为“public DateTime CreatedTime { get; set; }" 但是,由于它是 JSON 格式,因此只返回错误。我怎样才能纠正这个问题,以便它以 DateTime 格式正确存储在 DTO 中?因为理想情况下,我想将这个 class 文件搭建成一个 table 文件,这样它就可以在数据库中保存数据。
有关此的更多上下文,这是我要在我的数据库中纠正的内容。
我希望显示日期时间而不是一长串数字,就像这里的 Createby 和 DueBy 下那样。
如有任何帮助,我们将不胜感激。
[编辑] 添加了 unix 时间格式合规性[/编辑]
只需输入@Fildor 所说的代码
public long CreatedTime { get; set; }
[JsonIgnore] // will ignore the property below when serializing/deserializing
public DateTimeOffset CreatedTimeDate {
// Don't need a setter as the value is directly get from CreatedTime property
get {
return DateTimeOffset.FromUnixTimeMilliseconds(CreatedTime);
}
}
还用于 this answer 根据要求转换为 DateTime,使用当地时间。
如果不需要偏移量,请按以下方式转换为 DateTime:https://docs.microsoft.com/fr-fr/dotnet/standard/datetime/converting-between-datetime-and-offset
我目前正在构建一个检索 API 数据并将其保存到数据库中的项目。除了 API 中的 DateTime 值外,一切正常。我有一个 class,它使用 RestSharp 获取 API 数据,然后它使用 NewtonSoft.Json 将 API 数据反序列化为 JSON 格式,然后将其存储到临时 DTO class 文件。这是API方法。
public static void getAllRequestData()
{
var client = new RestClient("[My API URL]");
var request = new RestRequest();
var response = client.Execute(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
string rawResponse = response.Content;
AllRequests.Rootobject result = JsonConvert.DeserializeObject<AllRequests.Rootobject>(rawResponse);
}
}
现在是临时存储已转换 JSON 数据的 DTO 文件 (AllRequests)。
public class AllRequests
{
public class Rootobject
{
public Operation Operation { get; set; }
}
public class Operation
{
public Result Result { get; set; }
public Detail[] Details { get; set; }
}
public class Result
{
public string Message { get; set; }
public string Status { get; set; }
}
public class Detail
{
[Key]
public int Id { get; set; }
public string Requester { get; set; }
public string WorkOrderId { get; set; }
public string AccountName { get; set; }
public string CreatedBy { get; set; }
public string Subject { get; set; }
public string Technician { get; set; }
public string IsOverDue { get; set; }
public string DueByTime { get; set; }
public string Priority { get; set; }
public string CreatedTime { get; set; }
public string IgnoreRequest { get; set; }
public string Status { get; set; }
}
}
详细信息中我希望成为日期时间格式的代码行是“DueByTime”和“CreatedTime”,而不是字符串值。目前他们只在字符串中保存 JSON 格式的 DateTime 值,例如“1477394860065”。
我试过将“public string CreatedTime { get; set; }” 改为“public DateTime CreatedTime { get; set; }" 但是,由于它是 JSON 格式,因此只返回错误。我怎样才能纠正这个问题,以便它以 DateTime 格式正确存储在 DTO 中?因为理想情况下,我想将这个 class 文件搭建成一个 table 文件,这样它就可以在数据库中保存数据。
有关此的更多上下文,这是我要在我的数据库中纠正的内容。
我希望显示日期时间而不是一长串数字,就像这里的 Createby 和 DueBy 下那样。
如有任何帮助,我们将不胜感激。
[编辑] 添加了 unix 时间格式合规性[/编辑]
只需输入@Fildor 所说的代码
public long CreatedTime { get; set; }
[JsonIgnore] // will ignore the property below when serializing/deserializing
public DateTimeOffset CreatedTimeDate {
// Don't need a setter as the value is directly get from CreatedTime property
get {
return DateTimeOffset.FromUnixTimeMilliseconds(CreatedTime);
}
}
还用于 this answer 根据要求转换为 DateTime,使用当地时间。
如果不需要偏移量,请按以下方式转换为 DateTime:https://docs.microsoft.com/fr-fr/dotnet/standard/datetime/converting-between-datetime-and-offset