JSON时间转换格式化
通常JSON时间一般是这样的格式。

1
/Date(1436595149269)/
通常我们用AJAX获取下来的JSON数据,如果有时间,都是这种格式的。其中,中间的一段数字"1436595149269"表示的是1970年1月1日至今的毫秒数。

这种时间格式并不能够直接显示给用户查看,因为这是人类所看不懂的时间。所以我们需要将它转换为正常人能够理解的时间格式。

第一步,替换掉/Date()/

//对外暴露的函数,替换掉/Date( )/
function convertTime(jsonTime, format) {
    var date = new Date(parseInt(jsonTime.replace("/Date(", "").replace(")/", ""), 10));
    var formatDate = date.format(format);
    return formatDate;
}


第二步,将数字时间转换为可视化的yyyy-MM-dd HH:mm:ss的格式

//先扩展一下javascript的Date类型,增加一个函数,
用于返回我们想要的 yyyy-MM-dd HH:mm:ss 这种时间格式
Date.prototype.format = function (format) {
    var date = {
        "M+": this.getMonth() + 1,
        "d+": this.getDate(),
        "h+": this.getHours(),
        "m+": this.getMinutes(),
        "s+": this.getSeconds(),
        "q+": Math.floor((this.getMonth() + 3) / 3),
        "S+": this.getMilliseconds()
    };

    if (/(y+)/i.test(format)) {
        format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
    }

    for (var k in date) {
        if (new RegExp("(" + k + ")").test(format)) {
          format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
        }
    }

    return format;
}



调用示例

$(function () {
    var dt = '/Date(1436595149269)/';
    var formatTime1 = convertTime(dt, "yyyy-MM-dd hh:mm:ss");//2015-07-11 14:12:29
    $("#div1").text(formatTime1);
    var formatTime2 = convertTime(dt, "yyyy年MM月dd日 hh时mm分ss秒");//2015年07月11日 14时12分29秒
    $("#div2").text(formatTime2);
})



另外一个实现
另外,还有一个方式,这个就不需要改原来Date原型了。

<!doctype html>
<html>
<head>
    <title>JSON时间格式化(/Date()转换为yyyy-MM-dd HH:mm:ss)</title>
</head>
<body>
<script>
//yyyy-MM-dd HH:mm:SS
function getDateTime(date) {
    var year = date.getFullYear();
    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hh = date.getHours();
    var mm = date.getMinutes();
    var ss = date.getSeconds();
    return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + ss;
}


//调用的是这个方法

function ConvertJSONDateToJSDate(jsondate) {
    var date = new Date(parseInt(jsondate.replace("/Date(", "").replace(")/", ""), 10));
    return date;
}
var date = "/Date(1379944571737)/";
alert(getDateTime(ConvertJSONDateToJSDate(date)));
</script>
</body>
</html>


 

Json.net实现方便的Json转C#(dynamic动态类型)对象
以前需要将一段json字符串转换为C#对象时,一般都是定义一个与之对应的实体类来接收。这样做有一个很大的缺点,就是当字符串特别长,属性特别多,又有嵌套时,手敲这个实体类就非常痛苦。

比如之前做的一个接收百度七天天气预报的API,层层嵌套,很痛苦。

C# 4.0 之后有了动态类型dynamic。

用这个东西配合Json.net可以实现不用定义实体类的json转dynamic类型对象。

以下示例需要先引用Newtonsoft.Json.dll

public class Person {
    public int Id { get; set; }
    public string Name { get; set; }
} 
class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        p.Id = 1;
        p.Name = "刘备";
        //C#对象转Json
        string json = JsonConvert.SerializeObject(p);
        Console.WriteLine(json);    //{"Id":1,"Name":"刘备"}

        //此处模拟在不建实体类的情况下,反转将json返回dynamic对象
        var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
        Console.WriteLine(DynamicObject.Name);  //刘备
        Console.ReadKey();
    }
}



以上只是借用了一个实体类来获得一个简单的JSON对象。

实际上,可以完全没有这个Person类。

static void Main(string[] args)
{
    string json = "{\"Id\":1,\"Name\":\"刘备\",\"Age\":\"22\"}";
    //此处模拟在不建实体类的情况下,反转将json返回回dynamic对象
    var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
    Console.WriteLine(DynamicObject.Name);  //刘备
    Console.ReadKey();
}

如果未引用Microsoft.CSharp.dll,关于动态类型,VS可能会报错。

VS 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?