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"}]}
原文地址:https://www.cnblogs.com/zjypp/p/2319283.html