背景:前段时间在用easyui框架做一个项目的时候,由于对数据集合中显示的时间,有的希望是日期(即不带时分秒)而有的又希望是时间(即带有时分秒)的样式,而json字符串返回的时间字符串在日期和时间直接还带有字母【T】,开始只是使用easyui自带的format方式在前端进行处理,这样也很方便,至少满足了上面的需求。但是后期在做自动生成列等功能的时候,发现不好使用easyui自带的前端处理方式(也许是easyui的研究不到位吧)。于是开始考虑在后台传数据的时候就处理好,这样前台UI直接显示就好了。沿着这个思路也好了很多网上资料学习,最终解决了这个问题。
开始的时候我找到了这样的处理方式,暂且说是方法一。
首先在要导入Newtonsoft.Json.dll类库,我的项目是用的.net 4.0,所以这里导入的Newtonsoft.Json.dll也是4.0版本的。
然后直接看代码:
//通过这个json.net的对象设置时间的展示
IsoDateTimeConverter dtConverter = newIsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd" };
List lstViews = newList();
//添加需要的数据到lstViews中
…….
……
string data =JsonConvert.SerializeObject(lstViews, dtConverter);
这种方法虽然实现了后台对时间字符串的处理,但是如果返回的json字符串中既有日期又有时间的要求则无法实现,因为它只能统一的格式化时间,不能两种都实现。
所以后来我使用了第二中方式来处理,而且建议大家使用。
首先,还是Newtonsoft.Json.dll导入问题,这里就不多说了,相信大家都搞得定的。
具体实现就直接代码了
var lstData = newList();
//添加需要的数据到lstData中
…….
……
var formatData = lstData.Select(x => new
{
x.Id,
x.ItemId,
x.ItemName,
x.Remark,
x.TimeOfDay,
x.ExpendWeek,
ExpendDate =x.ExpendDate.ToString("yyyy-MM-dd"),
x.ExpendAmount,
x.CreateBy,
CreateDate = x.CreateDate == null ?"" : x.CreateDate.Value.ToString("yyyy-MM-dd HH:mm:ss")
}).ToList();
string data =JsonConvert.SerializeObject(formatData);
这里大家可以看到,对于数据库中对时间字段的设计时,不可为空和可为空的情况都有体现,对于需要显示成什么样的格式,可以在ToString()中自行定义。这里就不在多说了,不会自己去上网搜索,资料很多~~