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

我正在使用 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在文档中了解更多信息。

https://stackoverflow.com/questions/18193281/

相关文章:

javascript - 短语对象文字表示法中的 "literal"是什么意思?

json - 自定义 MarshalJSON() 永远不会在 Go 中被调用

ios - 如何在 Swift 中解析 JSON 中的数组?

json - Golang 将 JSON 数组解析成数据结构

python - 使用 JSON 模块进行 pretty-print 时如何实现自定义缩进?

javascript - 如何使用 Javascript 将数据写入 JSON 文件

java - 如何在 Java 的 JSON 字符串中找到指定的名称及其值?

python - 使用 simplejson 序列化简单类对象的最简单方法?

json - 在jq中将字符串转换为json

ios - (Cocoa 错误 3840。)“(字符 0 周围的值无效。)AFNetworking