json的三种反序列方式

来源:互联网 发布:淘宝卖刀具 编辑:程序博客网 时间:2024/06/01 07:39

    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的一点研究。





原创粉丝点击