• [转]JSON序列化与反序列化


    本文转自:http://www.cnblogs.com/ejiyuan/archive/2010/04/09/1708084.html

    方法一:引入System.Web.Script.Serialization命名空间使用 JavaScriptSerializer类实现简单的序列化
     
    序列化类:Personnel
     
    
            public class Personnel
            {
                public int Id { get; set; }
                public string Name { get; set; }
            }
     
     
     
    执行序列化反序列化:
     
    
    
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                Personnel personnel = new Personnel();
                personnel.Id = 1;
                personnel.Name = "小白";
    
    
                JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                //执行序列化
                string r1 = jsonSerializer.Serialize(personnel);
                
                //执行反序列化
                Personnel _Personnel = jsonSerializer.Deserialize<Personnel>(r1);
             }
    
    
     
     
     
    r1输出结果:{"Id":1,"Name":"小白"} 
    
    可以使用 ScriptIgnore属性标记不序列化公共属性或公共字段。
     
    
            public class Personnel
            {
                [ScriptIgnore]
                public int Id { get; set; }
                public string Name { get; set; }
            }
     
     
     
    r1输出结果:{"Name":"小白"} 
    
    方法二:引入 System.Runtime.Serialization.Json命名空间使用 DataContractJsonSerializer类实现序列化
     
    序列化类:People
     
    
            public class People
            {
                public int Id { get; set; }
                public string Name { get; set; }
            }
     
     执行序列化反序列化
     
    
    
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                People people = new People();
                people.Id = 1;
                people.Name = "小白";
    
    
                DataContractJsonSerializer json = new DataContractJsonSerializer(people.GetType());
                string szJson = "";
                //序列化
                using (MemoryStream stream = new MemoryStream())
                {
                    json.WriteObject(stream, people);
                    szJson = Encoding.UTF8.GetString(stream.ToArray());
                }
                //反序列化
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
                {
                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(People));
                    People _people = (People)serializer.ReadObject(ms);
                }
     
             }
    
    
     
    szJson输出结果:{"Id":1,"Name":"小白"}
     
    可以使用IgnoreDataMember:指定该成员不是数据协定的一部分且没有进行序列化,DataMember:定义序列化属性参数,使用DataMember属性标记字段必须使用DataContract标记类 否则DataMember标记不起作用。
     
    
    
    
    
            [DataContract]
            public class People
            {
                [DataMember(Name = "id")]
                public int Id { get; set; }
                [IgnoreDataMember]
                public string Name { get; set; }
            }
    
    
     
     
     
    输出结果: {"id":1}
  • 相关阅读:
    设计模式怎样解决设计问题
    抽象、多样性与可变性
    框架最符合开闭原则
    PHP开发api接口安全验证
    HTTP API接口安全设计
    MySQL——修改root密码的4种方法(以windows为例)
    关于nginx中不用.htaccess 用在ningx.conf中配置的问题
    API接口安全性设计
    Linux上vi(vim)编辑器使用教程
    LNMP下FTP服务器的安装和使用(Pureftpd和Proftpd)
  • 原文地址:https://www.cnblogs.com/freeliver54/p/3142490.html
Copyright © 2020-2023  润新知