有没有办法改变 DataContractJsonSerializer 序列化日期的方式?
目前,它将日期转换为:
{“日期”:“/日期(1260597600000-0600)/”}
我想将其转换为人类可读的日期格式。
我正在使用 openrasta 框架构建一个 RestApi。我可以编写 OperationInterceptors,它会在序列化/反序列化之前的某个阶段将 JSON 日期时间格式转换为人类可读的格式吗?或者还有其他方法吗?
使用 DataContractJsonSerializer 构造函数传递您的序列化设置:
var s = new DataContractJsonSerializer(
typeof(YourTypeToSerialize),
new DataContractJsonSerializerSettings
{
DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss")
}
);
最后我处理了这个问题如下(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" />
让我知道进一步澄清。