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);
        }


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值