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. 创建类

  1. public class JsonHelper  
  2.  {  
  3.      // 序列化  
  4.      public static  string JsonSerializer<T>(T t)  
  5.      {  
  6.          // 使用 DataContractJsonSerializer 将 T 对象序列化为内存流。   
  7.          DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof (T));  
  8.          MemoryStream ms = new MemoryStream();  
  9.          // 使用 WriteObject 方法将 JSON 数据写入到流中。   
  10.          jsonSerializer.WriteObject(ms, t);  
  11.          // 流转字符串  
  12.          string jsonString = Encoding.UTF8.GetString(ms.ToArray());  
  13.          ms.Close();  
  14.          //替换Json的Date字符串    
  15.          string p = @"\\/Date\((\d+)\+\d+\)\\/";     
  16.          MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString);    
  17.          Regex reg = new Regex(p);     
  18.          jsonString = reg.Replace(jsonString, matchEvaluator);  
  19.          return jsonString;  
  20.      }  
  21.      public static T JsonDeserialize<T>(string  jsonString)  
  22.      {  
  23.          //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式    
  24.          string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";     
  25.          MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate);     
  26.          Regex reg = new Regex(p);    
  27.          jsonString = reg.Replace(jsonString, matchEvaluator);  
  28.          DataContractJsonSerializer jsonSerializer=new DataContractJsonSerializer(typeof(T));  
  29.          // 字符串转流  
  30.          MemoryStream ms=new MemoryStream(Encoding.UTF8.GetBytes(jsonString));  
  31.          // 通过使用 DataContractJsonSerializer 的 ReadObject 方法,将 JSON 编码数据反序列化为T   
  32.          T obj = (T) jsonSerializer.ReadObject(ms);  
  33.          return obj;  
  34.      }  
  35.      public static string ConvertJsonDateToDateString(Match match)  
  36.      {  
  37.          string result = string.Empty;  
  38.          DateTime dateTime=new DateTime(1970,1,1);  
  39.          dateTime = dateTime.AddMilliseconds(long.Parse(match.Groups[1].Value));  
  40.          dateTime = dateTime.ToLocalTime();  
  41.          result = dateTime.ToString("yyyy-MM-dd HH:mm:ss");  
  42.          return result;  
  43.      }  
  44.      private static string ConvertDateStringToJsonDate(Match m)  
  45.      {  
  46.          string result = string.Empty;     
  47.          DateTime dt = DateTime.Parse(m.Groups[0].Value);   
  48.          dt = dt.ToUniversalTime();     
  49.          TimeSpan ts = dt - DateTime.Parse("1970-01-01");    
  50.          result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds);     
  51.          return result;     
  52.      }  
  53.  }  
  54.  public class Person  
  55.  {  
  56.      public string Name { getset; }  
  57.      public int Age { getset; }  
  58.      public DateTime dateTime { getset; }  
  59.  }  
   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. 后台代码实现

  1. protected void Page_Load(object sender, EventArgs e)  
  2.        {  
  3.            // 序列化  
  4.            Person p = new Person();  
  5.            p.Name = "Bradley";  
  6.            p.Age = 24;  
  7.            p.dateTime = DateTime.Now;  
  8.            string jsonString = JsonHelper.JsonSerializer<Person>(p);  
  9.            Response.Write(jsonString);  
  10.            Response.Write("</br>");  
  11.            // 反序列化  
  12.            string jsonString1 = "{\"Age\":28,\"Name\":\"张三\"}";      
  13.            Person p1 = JsonHelper.JsonDeserialize<Person>(jsonString);  
  14.            Response.Write(p1.Name+":"+p1.Age.ToString()+"Time:"+p.dateTime.ToString());  
  15.   
  16.            // 序列化字典  
  17.            Dictionary<string,string> dictionary=new Dictionary<stringstring>();  
  18.            dictionary.Add("Name:","Bradley");  
  19.            dictionary.Add("Age:","24");  
  20.            string jsonString2 = JsonHelper.JsonSerializer<Dictionary<stringstring>>(dictionary);  
  21.            Response.Write("</br>");  
  22.            Response.Write(jsonString2);  
  23.        }  
 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);
        }


 

 转自:http://blog.csdn.net/bradleydan/article/details/7925972

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值