10 序列化和传输大型数据流
1.前言
理解WCF的序列化形式
掌握DataContractSerializer序列化对象
比较性能
比较xmlSerializer序列化对象
大数据量传输设置
修改配置文件
设置编码
设置流模式
[DataContract]
数据契约则是定义服务端和客户端之间要传送的自定义数据类型。
那么该类型就可以被序列化在服务端和客户端之间传送。
类只有声明为[DataContract],该类型的对象才可以被传送,
且只有类的属性会被传送,需要在属性前加[DataMember]声明,这样该属性就可以被序列化传送。
[DataContract] //数据契约声明 class MyDataContract { [DataMember]//数据成员标记 public string Name { get; set; } [DataMember]//数据成员标记 public string Email { get; set; } }
2. WCF服务所支持的序列化器
现在一共是4种:
【1】XmlSerializer
【2】DataContratSerializer
【3】NetDataContractSerializer
【4】DataContractJsonSerializer
2.1 DataContractSerializer 序列化器
DataContractSerializer 是WCF默认的序列化器:
【1】创建DataContractSerializer实例的方式
指定根类型进行创建,根类型是序列化或反序列化实例的类型。
DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
【2】DataContractSerializer序列化方法
WriteObject() //序列化
ReadObject() //反序列化
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Text; namespace Keasy5.WCF.DataContractSerializers { public class Person { public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } } class Program { static void Main(string[] args) { DataContractSerializer dataContractSerializer = new DataContractSerializer(typeof (Person)); MemoryStream memoryStream = new MemoryStream(); Person person = new Person() { Name = "ABC", Age = 100, Address = "N/A" }; dataContractSerializer.WriteObject(memoryStream, person);//序列换 memoryStream.Position = 0; StreamReader streamReader = new StreamReader(memoryStream); string temp = streamReader.ReadToEnd(); Console.WriteLine("序列化"); Console.WriteLine(temp); Console.WriteLine("序列化"); var buffer = System.Text.Encoding.UTF8.GetBytes(temp); MemoryStream memoryStream2 = new MemoryStream(buffer); Person person2 = dataContractSerializer.ReadObject(memoryStream2) as Person; //反序列化 Console.WriteLine("姓名:{0}-年龄:{1}-地址:{2}",person2.Name,person2.Age,person2.Address ); Console.ReadKey(); } } }