web api中序列化后的时间中含有“T”的解决方法
原来的以下内容只解决了序列化的问题,但作为参数反序列时,会有不完全对应格式将不能正确得到日期的问题。
以下为完美方法:
1、在WebApiConfig.cs的Register方法中加入以下语句,插入自定义的JsonDateTimeConverter格式
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Insert(
0, new JsonDateTimeConverter());
2、新建一个类,名为JsonDateTimeConverter.cs,重写IsoDateTimeConverter的ReadJson方法,内容如下
/// <summary>
/// Json日期带T格式转换
/// </summary>
public class JsonDateTimeConverter : IsoDateTimeConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
DateTime dataTime;
if (DateTime.TryParse(reader.Value.ToString(), out dataTime))
{
return dataTime;
}
else
{
return existingValue;
}
}
public JsonDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
}
}
OK,到此完美解决。
以下为原来内容:
在web api中,系统会自动将返回的对象序列化为json数据,但是如果对象中含有时间的话,序列化后的时间中会含有“T”字符,如下:
- public object getJson()
- {
- var rst = new
- {
- name = "abc",
- time = DateTime.Now
- };
- return rst;
- }
返回后返回的json代码如下:
- {
- "name": "abc",
- "time": "2015-02-10T15:18:21.7046433+08:00"
- }
web api返回的是标准格式时间,但是我们平常并不需要标准格式的时间,那么我们如何修改返回的数据的时间格式呢?
在web api中,我们可以在WebApiConfig.cs的Register函数中新增以下配置来定义返回的时间类型格式,如下:
- //配置返回的时间类型数据格式
- GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
- new Newtonsoft.Json.Converters.IsoDateTimeConverter()
- {
- DateTimeFormat = "yyyy-MM-dd hh:mm:ss"
- }
- );
DateTimeFormat中的格式即是我们自定义的时间格式,定义后我们再访问getJson接口看看返回的数据会怎样,如下:
- {
- "name": "abc",
- "time": "2015-02-10 03:26:14"
- }
哈哈,变成了我们常用的格式了
来源:http://blog.csdn.net/soldierluo/article/details/43703743