以下方法不能在4.0框架中使用,在3.5能用
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Linq" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public class test
{
private String _uid;
public String uid
{
get { return _uid; }
set { _uid = value; }
}
private String _un;
public String un
{
get { return _un; }
set { _un = value; }
}
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{
//反序列化方法一:
//System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
//test[] obj = jss.Deserialize<test[]>("[{ uid:1, un:'aaaaa' }, { uid:2, un:'bbbbb' }, { uid:3, un:'ccc' }]");
//反序列化方法二:
System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
object[] obj = (object[])jss.Deserialize<object>("[{ uid:1, un:'aaaaa' }, { uid:2, un:'bbbbb' }, { uid:3, un:'ccc' }]");
var objs = obj.Select(a=>(System.Collections.Generic.IDictionary<string, object>)a).ToArray();
foreach (var item in objs)
{
Response.Write(item["uid"] + " " + item["un"]);
}
}
/// 序列化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button3_Click(object sender, EventArgs e)
{
object[] objs = {
new { uid=1, un="aaa"},
new { uid=2, un="bbb"},
new { uid=3, un="ccc"}
};
System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
string str = jss.Serialize(objs);
Response.Write(str);
}
</script>
以下方法能在4.0中使用
[DataContract]
public class Test
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
}
/
private void button1_Click(object sender, RoutedEventArgs e)
{
var obj = new Test() { Name = "123", Id = "111" };
Console.WriteLine(GetJson(new[] { obj }));
}
private void button2_Click(object sender, RoutedEventArgs e)
{
string str = "[{ \"Name\":\"test1\", \"Id\":\"6\" }]";
dynamic dyObj = ParseFromJson<Test[]>(str);
Console.WriteLine(dyObj[0].Id + " | " + dyObj[0].Name);
}
///
/// <summary>
/// 生成Json格式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
/// <summary>
/// 获取Json的Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="szJson"></param>
/// <returns></returns>
public static T ParseFromJson<T>(string szJson)
{
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}
以下方法只能在html中使用
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<script>
var str = "[{ uid:1, un:'aaaaa' }, { uid:2, un:'bbbbb' }, { uid:3, un:'ccc' }, { uid:4, un:'ddd' }, { uid:5, un:'ee' }]";
function ParseJsonToArray()
{
var objs = eval(str);
alert(objs.length + " " + objs[0]['uid'] + " " + objs[1]['un']);
}
//创建匿名数组
function NewNMArray()
{
var arr = new Array();
arr.push({ uid: 1, un: 'a' });
arr.push({ uid: 2, un: 'b' });
arr.push({ uid: 3, un: 'c' });
}
</script>
<input id="Button1" type="button" value="Client将序列化的数据转换成数组" οnclick="ParseJsonToArray();" />
<asp:Button ID="Button2" runat="server" Text="Server将序列化的数据转换成数组"
οnclick="Button2_Click" />
<asp:Button ID="Button3" runat="server" Text="Server将数组转换成序列化的数据"
οnclick="Button3_Click" />
</div>
</form>
</body>
</html>