DataContractJsonSerializer日期序列化

时间:2013-02-01 05:07:21

标签: c# openrasta

有没有办法改变DataContractJsonSerializer序列化日期的方式?

目前,它会将日期转换为:

{   “日期”:“/日期(1260597600000-0600)/” }

我想将其转换为人类可读的日期格式。

我正在使用openrasta框架构建RestApi。我可以编写OperationInterceptors,它会在序列化/反序列化之前的某个阶段将JSON日期时间格式转换为人类可读的东西吗?或者还有其他方法可以做到吗?

2 个答案:

答案 0 :(得分:2)

使用DataContractJsonSerializer构造函数传递序列化设置:

    var s = new DataContractJsonSerializer(
            typeof(YourTypeToSerialize),
            new DataContractJsonSerializerSettings
            {
                DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss")
            }
        );

答案 1 :(得分:1)

最后我处理了这个问题如下(c#)

    [DataMember]
    public string Date { get; set; }

    [IgnoreDataMember]
    public DateTime? DateForInternalUse { get; set; }

    [OnSerializing]
    public void OnSerializing(StreamingContext context)
    {
      Date = (DateForInternalUse != null) ? ((DateTime)DateForInternalUse).ToString(DateTimeFormatForSerialization) : null;
    }

    [OnDeserialized]
    public void OnDeserialized(StreamingContext context)
    {
      try
      {
        DateForInternalUse = !String.IsNullOrEmpty(Date) ? DateTime.ParseExact(Date, DateTimeFormats, null, DateTimeStyles.None) : (DateTime?)null;
      }
      catch (FormatException)
      {
        DateForInternalUse = null;
      }
    }

在这种情况下,我们可以指定我们想要支持的格式,我保留在web.config

<add key="DateTimePattern" value="yyyy-MM-dd,yyyy-MM-dd hh:mm:ss zzz,yyyy-MM-dd hh:mm:ss" />

让我知道进一步澄清。