Windows Phone 7开发遇到的事:解析JSON
WP从服务器、API交换数据一般都是用JSON格式字符串。
下面介绍用Newtonsoft.Json来处理JSON。
准备
1.到 http://json.codeplex.com/ 下载Newtonsoft.Json类库(Json45r10.zip)。
2.解压引用Newtonsoft.Json.dll。
解析
目标JSON字符串:
{
"Name":"I",
"Age":25,"
Family":
[{
"Name":"mom",
"Age":50,
"Family":[]
},
{
"Name":"dad",
"Age":50,
"Family":[]
}]
}
先根据目标JSON写一个Person类用来存放数据:
public class Person { public string Name { get; set; } public int Age { get; set; } public List<Person> Family { get; set; } }
开始解析:
string jsonString = "{\"Name\":\"I\",\"Age\":25,\"Family\":[{\"Name\":\"mon\",\"Age\":50,\"Family\":[]},{\"Name\":\"dad\",\"Age\":50,\"Family\":[]}]}"; //得到json对象(jsonString不是json字符串这里就会抛出异常) JObject json = JObject.Parse(jsonString); Person person = new Person(); //得到属性Name的值 person.Name = (string)json["Name"]; //Age的值 person.Age = (int)json["Age"]; //用下面的方法获得Family的值 person.Family = GetPersonListFromJArray(json["Family"] as JArray); private List<Person> GetPersonListFromJArray(JArray jArray) { List<Person> list = new List<Person>(); if (jArray != null) { foreach (JObject jObject in jArray) { Person person = new Person(); person.Name = (string)jObject["Name"]; person.Age = (int)jObject["Age"]; person.Family = GetPersonListFromJArray(jObject["Family"] as JArray); list.Add(person); } } return list; }
这样json就解析出来啦。下面我们看看一些小细节。
1.json["属性名"].Type可以知道这个属性的类型。
2.json["属性名"]是那个类型才能转为其对应的类型,否则为null。
构造
简单,就一句代码。
//这个person就是之前jsonString解析出来那个person string s = JsonConvert.SerializeObject(person);