json序列化和反序列化時間類型的字符串

  JSON格式不直接支持日期和時間。DateTime值值顯示爲「/Date(700000+0500)/」形式的JSON字符串,其中第一個數字(在提供的示例中爲 700000)是 GMT 時區中自 1970 年 1 月 1 日午夜以來按正常時間(非夏令時)通過的毫秒數。該數字能夠是負數,以表示以前的時間。示例中包括「+0500」的部分可選,它指示該時間屬於Local類型,即它在反序列化時應轉換爲本地時區。若是沒有該部分,則會將時間反序列化爲Utc。json

 

1.方法一:lua

JavaScript 寫法
function ChangeDateFormat(jsondate) {
  jsondate = jsondate.replace("/Date(", "").replace(")/", "");
  if (jsondate.indexOf("+") > 0) {
    jsondate = jsondate.substring(0, jsondate.indexOf("+"));
  }
  else if (jsondate.indexOf("-") > 0) {
    jsondate = jsondate.substring(0, jsondate.indexOf("-"));
  }

  var date = new Date(parseInt(jsondate, 10));
  var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
  var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
  return date.getFullYear() + "-" + month + "-" + currentDate;
} spa

調取方法(將Json序列化的時間由/Date(1294499956278+0800))轉爲字符串.net

例如:ChangeDateFormat("//Date(1294499956278+0800)//");orm

 

2.方法二:
jsonHelper 寫法(在控制器後臺的寫法)cdn

將Json序列化的時間由/Date(1294499956278+0800)轉爲字符串 blog

修改Person類,添加LastLoginTime:dns

 

  1. public class Person  
  2. {     
  3. public string Name { get; set; }     
  4. public int Age { get; set; }  
  5. public DateTime LastLoginTime { get; set; }     
  6.  } 

 

  1. Person p = new Person();     
  2. p.Name = "張三";     
  3. p.Age = 28;     
  4. p.LastLoginTime = DateTime.Now;     
  5. string jsonString = JsonHelper.JsonSerializer<Person>(p); 

控制器中(代碼以下)ip

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;     
  5. using System.Runtime.Serialization.Json;     
  6. using System.IO;     
  7. using System.Text;     
  8. using System.Text.RegularExpressions;     
  9. /// <summary>    
  10. /// JSON序列化和反序列化輔助類    
  11. /// </summary>    
  12. public class JsonHelper    
  13. {    
  14.      /// <summary>    
  15.     /// JSON序列化    
  16.     /// </summary>    
  17.      public static string JsonSerializer<T>(T t)    
  18.      {    
  19.          DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));    
  20.          MemoryStream ms = new MemoryStream();    
  21.         ser.WriteObject(ms, t);    
  22.          string jsonString = Encoding.UTF8.GetString(ms.ToArray());    
  23.          ms.Close();    
  24.          //替換Json的Date字符串    
  25.          string p = @"///Date/((/d+)/+/d+/)///"; /*////Date/((([/+/-]/d+)|(/d+))[/+/-]/d+/)////*/  
  26.          MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);    
  27.           Regex reg = new Regex(p);    
  28.          jsonString = reg.Replace(jsonString, matchEvaluator);    
  29.          return jsonString;    
  30.      }    
  31.      /// <summary>    
  32.      /// JSON反序列化    
  33.      /// </summary>    
  34.      public static T JsonDeserialize<T>(string jsonString)    
  35.      {    
  36.          //將"yyyy-MM-dd HH:mm:ss"格式的字符串轉爲"//Date(1294499956278+0800)//"格式    
  37.          string p = @"/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";    
  38.         MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);    
  39.         Regex reg = new Regex(p);    
  40.          jsonString = reg.Replace(jsonString, matchEvaluator);    
  41.          DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));    
  42.         MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));    
  43.          T obj = (T)ser.ReadObject(ms);    
  44.          return obj;    
  45.      }    
  46.       
  47.      /// <summary>    
  48.      /// 將Json序列化的時間由/Date(1294499956278+0800)轉爲字符串    
  49.      /// </summary>    
  50.      private static string ConvertJsonDateToDateString(Match m)    
  51.      {    
  52.          string result = string.Empty;    
  53.          DateTime dt = new DateTime(1970,1,1);    
  54.          dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));    
  55.          dt = dt.ToLocalTime();    
  56.          result = dt.ToString("yyyy-MM-dd HH:mm:ss");    
  57.         return result;    
  58.      }    
  59.      /// <summary>    
  60.      /// 將時間字符串轉爲Json時間    
  61.      /// </summary>    
  62.      private static string ConvertDateStringToJsonDate(Match m)    
  63.      {    
  64.          string result = string.Empty;    
  65.          DateTime dt = DateTime.Parse(m.Groups[0].Value);    
  66.          dt = dt.ToUniversalTime();    
  67.          TimeSpan ts = dt - DateTime.Parse("1970-01-01");    
  68.          result = string.Format("///Date({0}+0800)///",ts.TotalMilliseconds);    
  69.         return result;    
  70.     }    
  71.  }  

 

 序列化Demo:字符串

Person p = new Person();     

p.Name = "張三";     

p.Age = 28;     

p.LastLoginTime = DateTime.Now;    

string jsonString = JsonHelper.JsonSerializer<Person>(p);  

運行結果:

{"Age":28,"LastLoginTime":"2011-01-09 01:00:56","Name":"張三"}

   反序列化Demo:

string json = "{/"Age/":28,/"LastLoginTime/":/"2011-01-09 00:30:00/",/"Name/":/"張三/"}";

p=JsonHelper.JsonDeserialize<Person>(json);


運行結果:
在後臺替換字符串適用範圍比較窄,若是考慮到全球化的有多種語言還會更麻煩。

本文摘自http://blog.csdn.net/cncdns/article/details/6164389 cncdns的專欄
相關文章
相關標籤/搜索