JavaScriptSerializer 是 .Net3.5 才加進來的類別, 可以用來將指定的 JSON 字串轉換成物件圖形。
public string Serialize(object obj); public object Deserialize(string input, Type targetType); public T Deserialize<T>(string input); public object DeserializeObject(string input);
- Serialize :將物件或連接之物件的圖形序列化至指定資料流。
- Deserialize :將資料流還原序列化至物件圖形。
- DeserializeObject :將指定的 JSON 字串轉換成物件圖形。
Json 的序列化和還原序列化
private void btnJavaScriptSerializer_Click(object sender, EventArgs e) { //initial data var employee = new Employee { ID = 1, Name = "vito", Birthday = new DateTime(1977, 7, 7), Departmnet = new Department { ID = 2, Name = "IT Dept" } }; //Serialize an entity to Json JavaScriptSerializer jSer = new JavaScriptSerializer(); string data = jSer.Serialize(employee); //Deserialize Json string to entity var emp = jSer.Deserialize<Employee>(data); Console.WriteLine("ID={0}", emp.ID); Console.WriteLine("Name={0}", emp.Name); Console.WriteLine("Birthday={0}", emp.Birthday.ToString()); Console.WriteLine("DeptID={0}", emp.Departmnet.ID); Console.WriteLine("DeptName={0}", emp.Departmnet.Name); //ID=1 //Name=vito //Birthday=1977/7/6 下午 04:00:00 //DeptID=2 //DeptName=IT Dept }
public class Employee { public int ID { get; set; } public string Name { get; set; } public DateTime Birthday { get; set; } public Department Departmnet { get; set; } } public class Department { public int ID { get; set; } public string Name { get; set; } }
底下是序列化後的資料內容
{"ID":1,"Name":"vito","Birthday":"/Date(237052800000)/","Departmnet":{"ID":2,"Name":"IT Dept"}}
註1:
JSON 格式的第一層不可以是陣列,否則無法還原序列化。
[ { "empid":"1", "name":"vito", "familys":[ {"id":"001","name":"family1"}, {"id":"002","name":"family2"}, {"id":"003","name":"family3"} ] }, { "empid":"2", "name":"shao", "familys":[{"id":"004","name":"family4"}] } ]
{ "emps": [ { "empid":"1", "name":"vito", "familys":[ {"id":"001","name":"family1"}, {"id":"002","name":"family2"}, {"id":"003","name":"family3"} ] }, { "empid":"2", "name":"shao", "familys":[ {"id":"004","name":"family4"} ] } ] }
註2:
在 .NET Framework 中,用來序列化 JSON 資料的類別,除了內建的 JavaScriptSerializer 外,還有 DataContractJsonSerializer 類別。 此外,還有免費的 Json.NET 類別可以使用。
將 Json 轉成 Dictionary
private void button2_Click(object sender, EventArgs e) { string data = "{\"ID\":1,\"Name\":\"vito\",\"Birthday\":\"1977/7/7\",\"Departmnet\":{\"ID\":2,\"Name\":\"IT Dept\"}}"; JavaScriptSerializer jSer = new JavaScriptSerializer(); var obj = jSer.DeserializeObject(data); Dictionary<string, object> emp = jSer.DeserializeObject(data) as Dictionary<string, object>; Dictionary<string, object> dep = emp["Departmnet"] as Dictionary<string, object>; Console.WriteLine("ID={0}", emp["ID"].ToString()); Console.WriteLine("Name={0}", emp["Name"].ToString()); Console.WriteLine("Birthday={0}", emp["Birthday"].ToString()); Console.WriteLine("DeptID={0}", dep["ID"].ToString()); Console.WriteLine("DeptName={0}", dep["Name"].ToString()); //ID=1 //Name=vito //Birthday=1977/7/7 //DeptID=2 //DeptName=IT Dept }
沒有留言:
張貼留言