Json的序列化和反序列化(一)

補充知識:

1.字符串轉比特數組
 
(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");
 
(2)byte[] bt=Convert.FromBase64String("字符串");
 
2.字符串轉流
 
(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));
 
(2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));
 
3.流轉比特數組
 
(1)byte[] bt=ms.ToArray();
 
(2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);
 
4.流轉字符串
 
(1)string str=Convert.ToBase64String(ms.ToArray());
 
(2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());
 
5.比特數組轉字符串
 
(1)string str=System.Text.Encoding.Default.GetString(bt);
 
(2)string str=Convert.ToBase64String(bt);
 
6.比特數組轉流
 
(1)MemoryStream ms=new MemoryStream(bt);
 
(2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);

 

 

1. 添加引用System.ServiceModel.Web

2. 創建類

   public class JsonHelper
    {
        // 序列化
        public static  string JsonSerializer<T>(T t)
        {
            // 使用 DataContractJsonSerializer 將 T 對象序列化爲內存流。 
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof (T));
            MemoryStream ms = new MemoryStream();
            // 使用 WriteObject 方法將 JSON 數據寫入到流中。 
            jsonSerializer.WriteObject(ms, t);
            // 流轉字符串
            string jsonString = Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            //替換Json的Date字符串  
            string p = @"\\/Date\((\d+)\+\d+\)\\/";   
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);  
            Regex reg = new Regex(p);   
            jsonString = reg.Replace(jsonString, matchEvaluator);
            return jsonString;
        }
        public static T JsonDeserialize<T>(string  jsonString)
        {
            //將"yyyy-MM-dd HH:mm:ss"格式的字符串轉爲"\/Date(1294499956278+0800)\/"格式  
            string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";   
            MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);   
            Regex reg = new Regex(p);  
            jsonString = reg.Replace(jsonString, matchEvaluator);
            DataContractJsonSerializer jsonSerializer=new DataContractJsonSerializer(typeof(T));
            // 字符串轉流
            MemoryStream ms=new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
            // 通過使用 DataContractJsonSerializer 的 ReadObject 方法,將 JSON 編碼數據反序列化爲T 
            T obj = (T) jsonSerializer.ReadObject(ms);
            return obj;
        }
        public static string ConvertJsonDateToDateString(Match match)
        {
            string result = string.Empty;
            DateTime dateTime=new DateTime(1970,1,1);
            dateTime = dateTime.AddMilliseconds(long.Parse(match.Groups[1].Value));
            dateTime = dateTime.ToLocalTime();
            result = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
            return result;
        }
        private static string ConvertDateStringToJsonDate(Match m)
        {
            string result = string.Empty;   
            DateTime dt = DateTime.Parse(m.Groups[0].Value); 
            dt = dt.ToUniversalTime();   
            TimeSpan ts = dt - DateTime.Parse("1970-01-01");  
            result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds);   
            return result;   
        }
    }
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public DateTime dateTime { get; set; }
    }


 

3. 後臺代碼實現

 protected void Page_Load(object sender, EventArgs e)
        {
            // 序列化
            Person p = new Person();
            p.Name = "Bradley";
            p.Age = 24;
            p.dateTime = DateTime.Now;
            string jsonString = JsonHelper.JsonSerializer<Person>(p);
            Response.Write(jsonString);
            Response.Write("</br>");
            // 反序列化
            string jsonString1 = "{\"Age\":28,\"Name\":\"張三\"}";    
            Person p1 = JsonHelper.JsonDeserialize<Person>(jsonString);
            Response.Write(p1.Name+":"+p1.Age.ToString()+"Time:"+p.dateTime.ToString());

            // 序列化字典
            Dictionary<string,string> dictionary=new Dictionary<string, string>();
            dictionary.Add("Name:","Bradley");
            dictionary.Add("Age:","24");
            string jsonString2 = JsonHelper.JsonSerializer<Dictionary<string, string>>(dictionary);
            Response.Write("</br>");
            Response.Write(jsonString2);
        }


 

 

發佈了26 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章