zoukankan      html  css  js  c++  java
  • Net序列化JSON序列化


       
    当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。
        把对象转换为字节序列的过程称为
    对象的序列化。
        把字节序列恢复为对象的过程称为对象的反序列化。

    Net提供几种方式的序列化方式包括XML,二进制,SOAP序列化,DataContract系列化和DatacontractJSON序列化

    这个文章主要说说DataContractJSON序列化.

    JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间快速交换少量数据.javascript对json是原生支持,很适合在js端显示绑定数据

    第一步定义一个C#对象,在要 序列化的类上和属性,字段上添加上可以序列化标签。
    如果没有添加[DataMember]标签,那么这个属性和字段不会被序列化的
    即使是私有属性和字段也会被序列化

        [DataContract]
        public class Student
        {
            [DataMember]
            public int Age;
             [DataMember]
            public string Name;
        }
    }

    实例代码:
    构造对象
                Student s = new Student();
                s.Age = 100;
                s.Name = "kitty";


     string jsonContent = string.Empty;
                DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(Student));
                using (MemoryStream ms = new MemoryStream())
                {
                    serialize.WriteObject(ms, s);
                    jsonContent = System.Text.Encoding.UTF8.GetString(ms.ToArray());
                    Console.WriteLine(jsonContent);
                }

    输出的是:{"Age":100,"Name":"kitty"}


    如何反序列化,就是将json字符串转换成Student的对象
               byte[] temps = System.Text.Encoding.UTF8.GetBytes(jsonContent);
                using(Stream reader = new MemoryStream(temps))
                {
                    Student ss = serialize.ReadObject(reader) as Student;
                }

    泛型,字典集合的序列化

    在json序列化中集合类的序列化也是支持的,反应到json中就是js的数组形式
    实例代码:
           [DataContract]
        public class Student
        {
          //  [DataMember]
            public int Age;
             [DataMember]
            public string Name;
            [DataMember]
             public List<Pupil> Pupils { get; set; }
             [DataMember]
            public Dictionary<string, Pupil> Dic { get; set; }
             [DataMember]
             public Dictionary<string, List<Pupil>> DicList { get; set; }
        }

    Pupil是一个类
     public class Pupil
        {
            public string Name { get; set; }
        }

    运行结果
    {"Dic":[{"Key":"a","Value":{"Name":"a"}},{"Key":"b","Value":{"Name":"b"}}],"DicList":[{"Key":"c","Value":[{"Name":"e"}]}],"Name":"kitty","Pupils":[{"Name":"1"},{"Name":"2"},{"Name":"3"}]}
  • 相关阅读:
    Groovy 设计模式 -- null对象模式
    Groovy 设计模式 -- 借贷
    Groovy 设计模式 -- 抽象工厂 模式
    Groovy 设计模式 -- Strategy 模式
    Groovy 设计模式 -- proxy & delegate
    Groovy 类名称赋值为变量使用(newInstance & new)
    yaml
    REST POST PUT差别
    Continuous Design
    通配符 Globbing赏析
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319283.html
Copyright © 2011-2022 走看看