c# - 强制 JSON.NET 在序列化 DateTime 时包含毫秒(即使 ms 组件为零)

标签 c# json datetime serialization json.net

我正在使用 JSON.NET 直接从对象实例序列化 DateTime 值(不使用带有格式化程序的 DateTime.ToString())。

有没有办法强制 JSON.NET 在序列化中包含毫秒,即使 DateTime 的毫秒部分为零?

背景:对于这个 JSON 端点,我有一个非常慢的 Web 服务使用者。条件逻辑对消费者来说很昂贵,所以我想每次都提供相同的数据格式。

最佳答案

我们在我当前的项目中遇到了同样的问题。我们正在使用 Web API(以及 JSON.Net)来实现 REST API。我们发现,在序列化 DateTime 时对象,JSON.Net 忽略毫秒的尾随零,或者如果它是零,则完全忽略日期的毫秒。我们的客户期望一个固定长度的日期时间字符串,精确到毫秒的 3 位数字。我们通过在 Application_Start() 中执行以下操作来修复它:

JsonSerializerSettings settings = HttpConfiguration.Formatters.JsonFormatter.SerializerSettings;
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter 
{ 
    DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'" 
};
settings.Converters.Add(dateConverter);

如果您不使用 Web API,您可以通过创建 JsonSerializerSettings 的新实例来做同样的事情。 , 添加 IsoDateTimeConverter如上所示,然后将序列化程序设置传递给 JsonConvert.SerializeObject() .

注意:如果您要序列化 ​​DateTimeOffset或本地 DateTime并且您想包含时区偏移量,请替换引用的 'Z'在上述格式中,带有未引用的 K . 见 Custom Date and Time Format Strings在文档中了解更多信息。

关于c# - 强制 JSON.NET 在序列化 DateTime 时包含毫秒(即使 ms 组件为零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193281/

相关文章:

c# - 为什么在 linq 语句中忽略 DebuggerStepThrough?

json - Phoenix : render JSON from a template

java - Joda Time 将包含在 Java 7 中?

java - 在 JodaTime 中创建特定时区的日期时间对象

Javascript 日期循环丢失 2015 年 2 月

c# - 用于选择要复制的参数的 LINQ 语法

c# - 从事件触发器内更改属性

C# - Windows 服务获取当前登录用户桌面目录路径

ios - 是否可以为纯 k-v json 创建 Swift Codable?

javascript - Amcharts - 当 php json 输出文件位于包含文件夹中时,Dataloader 插件不加载图表