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();

        }
    }
}
View Code

相关文章:

  • 2021-10-10
  • 2021-04-20
  • 2021-05-29
  • 2021-07-05
  • 2021-07-24
  • 2021-11-20
  • 2021-06-07
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-24
  • 2021-07-06
相关资源
相似解决方案