Json(c#)序列化与反序列化

以下方法不能在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>
    /// 序列化
    /// </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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

icewizardry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值