Welcome 微信登录

首页 / 脚本样式 / JavaScript / Metro应用Json数据处理

Metro应用Json数据处理2015-06-07Windows Phone 8 或者 Windows 8 平台对JSON数据的处理方式基本是一致的,需要使用DataContractJsonSerializer类将对象的实例序列化为JSON字符串,并将字符串反序列化为对象的实例,需要注意的此种处理方式要求Json数据的格式固定的。

Json字符串 => 对象

针对以下Json字符串进行数据对象的构造解析

{"name": "ZhangHui","sex": "男","cnblogs": {"address": "http://www.cnblogs.com/huizhang212/","age": 2,"nickname": "宇之乐"},"contacts": [{"type": "QQ","number": "411300114"},{"type": "Email","number": "huizhang212@163.com"}]}
1.构造对象

分析上面json数据的格式,可以发现其中包含子对象cnblogs和子对象数组contacts,所以需要构造两个子对象Cnblogs和Contact,对象代码如下:

/// <summary>/// 人员博客园论坛信息/// </summary>[DataContract]public class Cnblogs{[DataMember]public String nickname { get; set; }[DataMember]public int age { get; set; }[DataMember]public String address { get; set; }}/// <summary>/// 人员电话号码信息对象/// </summary>[DataContract]public class Contact{[DataMember]public String type { get; set; }[DataMember]public String number { get; set; }}
子对象构建完成后,构建json数据对应的对象,记为:Person,代码如下:

/// <summary>/// 人员信息对象/// </summary>[DataContract]public class Person{[DataMember]public String name { get; set; }[DataMember]public String sex { get; set; }[DataMember]public Cnblogs cnblogs { get; set; }[DataMember]public List<Contact> contacts { get; set; }}
构造对象必须有[DataContract]声明,在通过DataContractJsonSerializer进行序列号或者反序列号的过程中只对有[DataMember]声明的属性生效,没有[DataMember]声明的属性将会被忽略,对象属性的大小写需要和json数据对应字段保持一致,否则该属性的值无法获取。

2.Json字符串转换Person对象的转换函数实现

/// <summary>/// 解析json数据转化为Person对象/// </summary>/// <param name="json"></param>/// <returns></returns>public Person getPersionByJson(String json){if (String.IsNullOrEmpty(json)){return null;}try{Person info = new Person();MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));DataContractJsonSerializer ser = new DataContractJsonSerializer(info.GetType());info = ser.ReadObject(ms) as Person;return info;}catch{}return null;}

3.调用getPersionByJson方法将Json字符串转换为对象

//Json数据String json =@"{""name"": ""ZhangHui"",""sex"": ""男"",""cnblogs"": {""address"": ""http://www.cnblogs.com/huizhang212/"",""age"": 2,""nickname"": ""宇之乐""},""contacts"": [{""type"": ""QQ"",""number"": ""411300114""},{""type"": ""Email"",""number"": ""huizhang212@163.com""}]}";//json数据转换为Person对象Person person = getPersionByJson(json);
对象 => Json字符串

通过DataContractJsonSerializer可以直接将对象转换为Json字符串。

1.Person对象转换Json字符串的函数实现

/// <summary>/// 获Person对象的Json数据/// </summary>/// <param name="normal"></param>/// <returns></returns>public String getJsonByPerson(Person person){String json = String.Empty;try{MemoryStream ms = new MemoryStream();DataContractJsonSerializer ser = new DataContractJsonSerializer(person.GetType());ser.WriteObject(ms, person);ms.Position = 0;using (StreamReader s = new StreamReader(ms)){json = s.ReadToEnd();}}catch{}return json;}
2.调用getJsonByPerson方法将Person对象转换为Json字符串

//构建一个Persion对象Person person = new Person(){name = "ZhangHui",sex = "男",cnblogs = new Cnblogs(){nickname = "宇之乐",age = 2,address = "http://www.cnblogs.com/huizhang212/"},contacts = new List<Contact>() {new Contact(){ type="QQ", number="411300114" },new Contact(){ type="Email", number="huizhang212@163.com" }}};//转换为json数据String personJson = getJsonByPerson(person);
作者:宇之乐

出处:http://www.cnblogs.com/huizhang212/