json的三种反序列方式(转载)

JSON(JavaScript Object Notation),在实际的开发中非常常用,甚至一个json就可以保存所有需要的信心呢。

    对象:一个对象以花括号"{"开始,并以"}"结束,json存储使用key:value形式,每一个键后 有一个冒号,冒号后是value内容,多个键值对的分隔使用逗号分隔,如:Var test = {"id":"123","name":"joe"}。

    数组:以"["开始,并以"]"结束,其中是一个一个的对象,每个对象使用逗号分隔,如:Var test = [{"user":{"id":"123","name":"joe"}},{"user":{"id":"234","name":"tom"}}]

    字符串:使用反斜杠分隔,如:Var test = "{\"id":\"123",\"name":\"joe"}"

    当我们取出的数据为json格式的时候,往往需要反序列化json成相应的对象,进而可以进行相应的逻辑处理。目前我只是研究了三种json反序列化的方式,下边会一一举例记录一下三种反序列化应用。下边的Demo中使用到的User实体类为:


 public class User
    {
        public string ID { set; get; }
 
        public string Name { set; get; }
 
        public string Sex { set; get; }
 
        public string Age { set; get; }
    }
    统一使用的json格式为:

var test = "{\"ID\":\"1\",\"Name\":\"张张\",\"Sex\":\"女\",\"Age\":\"1230\"}";
   一、javaScriptSerializer反序列化

   环境:引用System.Web.Extensions.dll

 //javaScriptSerializer
            JavaScriptSerializer js = new JavaScriptSerializer();
            var json3 = js.Deserialize<User>(test);
    二、Newtonsoft反序列化
    环境:引用Newtonsoft.dll


//Newtonsoft
            var json2 = JsonConvert.DeserializeObject<User>(test);
   三、DataContractJsonSerializer反序列化
   环境:引用System.Runtime.Serialization.dll

   首先需要写一个类,其中包括了对日期的处理,有些json数据中包含日期类型的数据,进行处理后就可以得到我们常见的格式:


 public static T DeserializeFromString<T>(string str) where T : class
        {
            try
            {
                //增加时间处理  
                string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}";
                Regex reg = new Regex(p);
                str = reg.Replace(str, r =>
                {
                    string result = string.Empty;
                    DateTime dt = DateTime.Parse(r.Groups[0].Value);
                    dt = dt.ToUniversalTime();
                    TimeSpan ts = dt - DateTime.Parse("1970-01-01");
                    result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds);
                    return result;
                });
                byte[] buffer = Encoding.UTF8.GetBytes(str);
                MemoryStream ms = new MemoryStream(buffer, 0, buffer.Length);
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
                return ser.ReadObject(ms) as T;
            }
            catch (Exception e)
            {
                return null;
            }
        }
    调用刚写的DeserializeFromString类:

//DataContractJsonSerializer解析方法
            User p = DeserializeFromString<User>(test);
     对于程序员来讲,将json反序列化对象会很容易操作,所以对于使用json格式存储的开发者来讲这些是必备的,仅以此文记录自己对json的一点研究。
--------------------- 
作者:张欢-Heidi 
来源:CSDN 
原文:https://blog.csdn.net/zh15732621679/article/details/73930324 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_33380252/article/details/83992943
今日推荐