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

来源:互联网 发布:java多线程数据传递 编辑:程序博客网 时间:2024/05/16 06:22


补充知识:

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

[csharp] view plaincopyprint?
  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.  }  


 

3. 后台代码实现

[csharp] view plaincopyprint?
  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.        }  


 

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

0 0