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
版权声明:本文为博主原创文章,转载请附上博文链接!