当前位置: 首页 > 知识库问答 >
问题:

使用Json.Net序列化时指定自定义日期时间格式

归明诚
2023-03-14

我正在开发一个API,使用ASP公开一些数据。NET Web API。

在其中一个API中,客户端希望我们以yyyy-MM-dd格式公开日期。我不想为此更改全局设置(例如,GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端。我在为多个客户开发的解决方案中做到了这一点。

我能想到的一个解决方案是创建一个自定义的JsonConverter,然后将其放入我需要进行自定义格式化的属性中

例如。

class ReturnObjectA 
{
    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime ReturnDate { get;set;}
}

只是想知道是否还有其他简单的方法。

共有3个答案

洪宏硕
2023-03-14

也可以使用< code > iso datetime converter 实例来完成,而无需更改全局格式设置:

string json = JsonConvert.SerializeObject(yourObject,
    new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });

这使用 JsonConvert.SerializeObject 重载,该重载采用参数 JsonConverter[] 参数。

慕容明煦
2023-03-14

您可以使用此方法:

public class DateFormatConverter : IsoDateTimeConverter
{
    public DateFormatConverter(string format)
    {
        DateTimeFormat = format;
    }
}

并且这样使用它:

class ReturnObjectA 
{
    [JsonConverter(typeof(DateFormatConverter), "yyyy-MM-dd")]
    public DateTime ReturnDate { get;set;}
}

DateTimeFormat字符串使用. NET格式字符串语法如下所述:https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings

怀洛华
2023-03-14

你在正确的轨道上。既然您说不能修改全局设置,那么下一个最好的办法就是根据需要应用< code>JsonConverter属性,就像您建议的那样。原来Json.Net已经有了一个内置的< code > IsoDateTimeConverter ,可以让你指定日期格式。不幸的是,您不能通过< code>JsonConverter属性设置格式,因为该属性的唯一参数是类型。然而,有一个简单的解决方案:子类化< code > IsoDateTimeConverter ,然后在子类的构造函数中指定日期格式。在需要的地方应用< code>JsonConverter属性,指定您的自定义转换器,然后就可以开始了。以下是所需的全部代码:

class CustomDateTimeConverter : IsoDateTimeConverter
{
    public CustomDateTimeConverter()
    {
        base.DateTimeFormat = "yyyy-MM-dd";
    }
}

如果您不介意时间也在其中,您甚至不需要对IsoDateTimeConverter进行子类化。它的默认日期格式是yyyy'-'MM'-'dd'T'HH':'MM':'ss。ffffffk(如源代码所示)。

 类似资料:
  • 问题内容: 我有一堂课 我想将下面的JSON数据反序列化到上面的类/对象中 我的想法是在JSON中是一个对象,但我只想获取(在JSON中)在反序列化期间将像在类中那样传递。 如何使用Json.NET实现该目标? 我相信我可以使用CustomJsonConverter完成它。但是我很困惑。docs中的示例仅用于,但不适用。 问题答案: 我只是使用上面在问题中提到的方法解决了我的问题。在我完整的代码下

  • ObjectMapper不会将对象格式化为自定义对象。 波乔不在我的控制之下,所以我不能改变它。我需要序列化WS的POJO对象。POJO有(我不知道为什么,因为它的日期来自数据库)。 我使用的是Spring boot 2.1.8。释放,所以。。。我将其放入我的依赖项中: 我还在应用程序中添加了这个。特性: 在配置文件中,我在配置文件中添加了这个bean,因为尽快配置ObjectMapper以接受更

  • 我正在尝试用自定义日期格式序列化和反序列化相当简单的对象: 在执行main方法时,我希望得到类似于: “日期”:“20151117” 20151117 但不幸的是得到了以下几点: {“日期”:“20151117”} 20151117-01-01T00:00:00.000+03:00(年份不正确) 似乎Jackson忽略了对象反序列化的@JSONFORMAT注释,并将字符串视为ISO-8601符号中

  • 问题内容: 默认输出格式为: 我无法弄清楚如何仅输出具有特定格式的日期部分: 或csv文件中两列中的日期和时间: 该文档太简短,无法给我任何有关如何执行这些操作的线索。有人可以帮忙吗? 问题答案: 您可以将它们保存为单独的列: 然后具体说明要导出到csv的列:

  • 问题内容: 我在csv文件中保存了数据,日期以标准的英国格式存储为字符串--表示它们看起来像: 上面的示例代表2012年1月12日和2012年1月30日。 当我使用pandas版本0.11.0导入此数据时,我进行了以下转换: 但它转换日期不一致。使用我现有的示例,2012年12月1日会将其转换为表示2012年12月1日的datetime对象,而30/01/2012将转换为2012年1月30日,这就