有没有办法改变DataContractJsonSerializer序列化日期的方式?
目前,它会将日期转换为:
{ “日期”:“/日期(1260597600000-0600)/” }
我想将其转换为人类可读的日期格式。
我正在使用openrasta框架构建RestApi。我可以编写OperationInterceptors,它会在序列化/反序列化之前的某个阶段将JSON日期时间格式转换为人类可读的东西吗?或者还有其他方法可以做到吗?
答案 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" />
让我知道进一步澄清。