因此,我从后端API返回一个日期值。
这是我的模型:
public class Sales {
    ....
    public DateTime DateCreated {get;set;}
}我从我的Controller返回它
[System.Web.Http.HttpGet]
public async Task<Sales> GetSales() {
    .....
    Sales s = await GetSalesForTheUser();
    return s;
}由DateTime返回的Controller值在其末尾缺少Z。
返回的值是:2021-07-27T05:23:41.937 --这是错误的,因为当我在Javascript中解析它时,它被视为本地日期时间。当我在它的末尾添加Z (2021-07-27T05:23:41.937Z)时,这是正确的。从Javascript解析的日期给出了正确的值。
如何从后端(C#)修复正确的解析值?
发布于 2021-07-27 07:48:38
我建议使用NewtonJson:
将包添加到项目中
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="..." />您可以通过在Startup.cs中添加一些配置来实现这一点:
public void ConfigureServices(IServiceCollection services)
{
  ...
    
  // Configure controllers.
  services.AddControllers()
      .AddNewtonsoftJson(options =>
      {
        options.SerializerSettings.Converters.Add(new IsoDateTimeConverter()
        {
          DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fffZ"
        });
      });
  ...
} 发布于 2021-07-27 07:57:07
听起来问题就在DateTime对象的Kind中,而不是序列化。
如果DateTime.Kind是Local或Unspecified,则在ISO8601中序列化它将省略时区信息(在您的例子中是Z,它指示UTC)。
要解决这个问题,首先尝试在返回数据之前指定DateTime的类型。看这里如何:https://learn.microsoft.com/en-us/dotnet/api/system.datetime.specifykind?view=net-5.0。
如果这样做有效,检查您的服务,看看您是否正确地解释了返回的数据以填充属性Sales.DateCreated,并确保这是UTC。
发布于 2021-07-27 06:56:52
如果您想在后端更改它,那么在您的Sales类中创建另一个属性,比如string类型的"DataCreatedFormated“和public string DateCreatedFormated => DateCreated.ToString(format);,其中"format”是来自这篇文章的一个属性。
我建议你用“u”格式。
https://stackoverflow.com/questions/68539924
复制相似问题