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 = "";
}