using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.Serialization;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//接口返回的json格式 在C#裏面怎麼解析json
string json = "{\"name\":\"張三\",\"age\":\"20\",\"phones\":[\"1311111\",\"135665646\"],\"familyMembers\":[{\"relation\":\"父親\",\"name\":\"張123\",\"age\":\"56\",\"phone\":[\"125455\",\"15652\"],\"work\":[{\"job\":\"工程師\",\"money\":\"15000\",\"adds\":\"南京路111號\",\"bus\":\"169路\"}]},{\"relation\":\"母親\",\"name\":\"王阿斯蒂芬\",\"age\":\"52\",\"phone\":[\"1254465\",\"1561552\"],\"work\":[{\"job\":\"工程師\",\"money\":\"15000\",\"adds\":\"南京路11號\",\"bus\":\"16路\"}]}]}";
//方案:笨辦法,json格式中的一對{}對應C#中的一個類,類名自己定義,除{}以爲,json中所有的屬性都表示C#類中同名屬性,大小寫敏感,
// 其中屬性爲數組時:
// 1、如果數組裏面的元素爲非json格式,則對應C#裏面的普通數組
// 2、如果數組裏面的元素是json格式,則對應C#裏面的範型數組,通常爲List類型
Response.Write(json+"<br/>");
User user = ToClass<User>(json);
//string xml = "<xml>";
//xml += "<username>" + user.name + "</username>";
//xml += "<age>" + user.age + "</age>";
//xml += "<phones>";
//foreach (string phone in user.phones)
//{
// xml += "<phone>" + phone + "</phone>";
//}
//xml += "</phones>";
//xml += "<family>";
//foreach (UserFamily family in user.familyMembers)
//{
// xml += "<familyrelation>" + family.relation + "</familyrelation>";
// xml += "<familyname>" + family.name + "</familyname>";
// xml += "<age>" + family.age + "</age>";
// xml += "<phones>";
// foreach (string phone in family.phone)
// {
// xml += "<phone>" + phone + "</phone>";
// }
// xml += "</phones>";
// xml += "<work>";
// foreach (UserWork work in family.work)
// {
// xml += "<job>" + work.job + "</job>";
// xml += "<money>" + work.money + "</money>";
// xml += "<adds>" + work.adds + "</adds>";
// xml += "<bus>" + work.bus + "</bus>";
// }
// xml += "</work>";
//}
//xml += "</family>";
//xml += "</xml>";
//Response.Write(xml+"<br/>");
if (user != null)
{
Response.Write("name:" + user.name + "<br />");
Response.Write("age:" + user.age + "<br />");
Response.Write("phones:" + user.phones.Length + "<br />");
foreach (string phone in user.phones)
{
Response.Write(phone + "<br />");
}
Response.Write("family:" + user.familyMembers.Count + "<br />");
foreach (UserFamily family in user.familyMembers)
{
Response.Write(family.relation + ":" + family.name + ",年齡" + family.age + "<br/>");
Response.Write("phones:" + family.phone.Length + "<br/>");
foreach (string phone in family.phone)
{
Response.Write(phone + "<br/>");
}
foreach (UserWork work in family.work)
{
Response.Write(work.job + " " + work.money + " " + work.adds + " " + work.bus + "<br/>");
}
}
}
}
private static T ToClass<T>(string szJson)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}
[DataContract]
public class User
{
[DataMember]
public string name = "";
[DataMember]
public string age = "";
[DataMember]
public string[] phones = new string[] { };
[DataMember]
public List<UserFamily> familyMembers = new List<UserFamily>();
}
[DataContract]
public class UserFamily
{
[DataMember]
public string relation = "";
[DataMember]
public string name = "";
[DataMember]
public string age = "";
[DataMember]
public string[] phone = new string[] { };
[DataMember]
public List<UserWork> work = new List<UserWork>();
}
[DataContract]
public class UserWork
{
[DataMember]
public string job = "";
[DataMember]
public string money = "";
[DataMember]
public string adds = "";
[DataMember]
public string bus = "";
}