zoukankan      html  css  js  c++  java
  • C#使用DataContractJsonSerializer实现Json格式的序列化和反序列化

    实体类Student:
    程序代码
    /// <summary>
    /// 学生实体类
    /// </summary>
    [System.Runtime.Serialization.DataContract(Namespace="http://www.mzwu.com/")]
    public class Student
    {
        private string _Name;
        private int _Age;

        public Student(string name, int age)
        {
            _Name = name;
            _Age = age;
        }

        /// <summary>
        /// 姓名
        /// </summary>
        [System.Runtime.Serialization.DataMember]
        public string Name
        {
            set {_Name = value;}
            get { return _Name; }
        }

        /// <summary>
        /// 年龄
        /// </summary>
        [System.Runtime.Serialization.DataMember]
        public int Age
        {
            set { _Age = value; }
            get { return _Age; }
        }
    }

    注意:必须使用DataContractAttribute对类进行标记,使用DataMemberAttribute类成员进行标记,否则该类无法被序列化。

    对象转为JSON字符串
    程序代码
    Student stu = new Student("小李", 30);

    System.Runtime.Serialization.Json.DataContractJsonSerializer json = new System.Runtime.Serialization.Json.DataContractJsonSerializer(stu.GetType());
    using (MemoryStream stream = new MemoryStream())
    {
        json.WriteObject(stream, stu);
        Response.Write(System.Text.Encoding.UTF8.GetString(stream.ToArray()));
    }

    JSON字符串转为对象


    程序代码
    System.Runtime.Serialization.Json.DataContractJsonSerializer json = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Student));
    using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes("{\"Age\":20,\"Name\":\"张三\"} ")))
    {
        Student stu = (Student)json.ReadObject(stream);
        Response.Write(string.Format("name:{0},age:{1}", stu.Name, stu.Age));
    }

    注:.NET Framework 3.5下才可用DataContractJsonSerializer!

  • 相关阅读:
    VS Code C++ 代码格式化方法(clang-format)
    linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间
    总结一下数据库的 一对多、多对一、一对一、多对多 关系
    netstat -st输出解析(二)
    Connection reset by peer的常见原因及解决办法
    Linux errno详解
    Linux之清理linux内存cache
    十大经典排序算法(动图演示)
    android studio导出apk
    多线程还是多进程的选择及区别
  • 原文地址:https://www.cnblogs.com/ldqwyl/p/2015733.html
Copyright © 2011-2022 走看看