• 伯牙的碎琴   2015/6/15 8:53:00
  • ASP.NET中如何实现JSON的序列化与反序列化
  • 关键字: JSON 序列化 反序列化
  • 方法一:引入System.Web.Script.Serialization命名空间使用 JavaScriptSerializer类实现简单的序列化

    序列化类:Personnel

            public class Personnel
            {
                
    public int Id { getset; }
                
    public string Name { getset; }
            }

    执行序列化反序列化:

    复制代码
            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 { getset; }
                
    public string Name { getset; }
            }

     

    r1输出结果:{"Name":"小白"}

    方法二:引入 System.Runtime.Serialization.Json命名空间使用 DataContractJsonSerializer类实现序列化

    序列化类:People

            public class People
            {
                
    public int Id { getset; }
                
    public string Name { getset; }
            }

     执行序列化反序列化

    复制代码
            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 { getset; }
                [IgnoreDataMember]
                
    public string Name { getset; }
            }
    复制代码

     

    输出结果: {"id":1}


大家的回答
  • 还没有人回答这个问题哦,亲,快来帮帮TA吧
  •   我来回答
  • 注册用户登录后才能发表评论,请 登录注册
  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款