I'm using JSON.NET to serialize DateTime values directly from object instances (not using DateTime.ToString() with formatter).

有没有办法强制使用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.

Json相关问答推荐

如何使用JQ有条件 Select 值

Vegalite中分组条形图中的偏移量问题

如何在改装Android中将ResponseBody转换为JSONObject

VBA json按特定属性名称提取所有数据

Azure数据工厂-WEB活动输出赢得';t返回JSON

Delphi 11.3无法从变体创建/添加JSON

如何使用 JOLT 将带有列表的 JSON 项目取消列出为多个项目?

带有 API 测试的 Typescript JSON 模式验证

如何在 JSonPath 中按值查找列表中的所有元素

提交后使用 Rails 7 结合 JSON 标签进行标记

将文本转换为 python 列表

在 postgresql 中将行转换为 json 对象

如何使用 gson 调用默认反序列化

Flask 请求和 application/json 内容类型

Python Flask-Restful POST 不采用 JSON 参数

在 JSON 对象中强制执行非空字段

Spring MVC:不反序列化 JSON 请求正文

如何在dart Flutter 中将json字符串转换为json对象?

如果键可能不存在,则从 Python dict 读取

仅使用字符串和值解析 JSON 对象