WCF 序列化

一.序列化概念

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

二.序列化方式

1.XML序列化

-定义对象类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SerializbleDemo
{
    using System.Xml;
    using System.Xml.Serialization;

    [XmlRoot]
    public  class Student
    {
        [XmlElement(Order =0)]
        public int ID { get; set; }

        [XmlElement(Order =1)]
        public string  StuName { get; set; }
        [XmlElement(Order =2)]
        public int Age { get; set; }
    }
}

  • 序列化实现
        /// <summary>
        /// 基于xml序列化
        /// </summary>
        void ShowXmlSerializable()
        {
            var xmlSerilizableObj = new Student()
            {
                ID = 100,
                StuName = "张三",
                Age = 20
            };

            //开辟内存
            var ms = new MemoryStream();
            //序列化对象
            var serializa = new XmlSerializer(typeof(Student));
            serializa.Serialize(ms, xmlSerilizableObj);
            ms.Position = 0;
            var s = new StreamReader(ms);
            var stu = s.ReadToEnd();
            this.richTextBox1.Text = stu;
        }

在这里插入图片描述

2.Soap序列化

  • 对象定义
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SerializbleDemo
{
    [Serializable]
    public class StuSoap
    {
        public int ID { get; set; }
        public string StuName { get; set; }
        public int Age { get; set; }
    }
}

  • 序列化实现
 /// <summary>
 /// 基于soap序列化
 /// </summary>
 void ShowSoapSerializable()
 {
     var stuSoap = new StuSoap()
     {
         ID = 100,
         StuName = "张三",
         Age = 20
     };
     //格式化器
     var formatter = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
     //开辟内存
     var ms = new MemoryStream();
     formatter.Serialize(ms, stuSoap);
     ms.Position = 0;

     var str = Encoding.UTF8.GetString(ms.GetBuffer());
     richTextBox1.Text = str;
 }

在这里插入图片描述

3.Binary序列化

-序列化对象类

using System;

namespace SerializbleDemo
{
    [Serializable]
    public class StuBinary
    {
        public int ID { get; set; }
        public string StuName { get; set; }
        public int Age { get; set; }
    }
}

  • 序列化实现
/// <summary>
/// 基于二进制序列化
/// </summary>
void BinarySerializable()
{
    StuBinary stu = new StuBinary()
    {
        ID = 1001,
        StuName = "王五",
        Age = 23
    };

    //定义一个格式化器
    var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    //开辟内存
    var ms = new MemoryStream();
    //序列化到流
    formatter.Serialize(ms, stu);
    ms.Position = 0;
    byte[] buffer = ms.GetBuffer();

    //转换为二进制值
    var str = System.Text.Encoding.UTF8.GetString(buffer);
    //....
}

4.基于契约序列化 DataContract

  • 对象类
using System.Runtime.Serialization;

namespace SerializbleDemo
{
    [DataContract]//添加特性
    public class StuDataContract
    {
        [DataMember(Order =0)]
        public int ID { get; set; }
        [DataMember(Order =1)]
        public string StuName { get; set; }
        [DataMember(Order = 2)]
        public int Age { get; set; }
    }
}

  • 序列化实现
/// <summary>
/// 序列化DataContract格式
/// </summary>
private void DataContractSerializable()
{

    StuDataContract stu = new StuDataContract()
    {
        ID = 1001,
        StuName = "小明",
        Age = 23
    };

    //定义转换器
    var ser = new System.Runtime.Serialization.DataContractSerializer(typeof(StuDataContract));

    //内存器
    var ms = new MemoryStream();

    ser.WriteObject(ms, stu);
    ms.Position = 0;

    var reader = new StreamReader(ms);
    var s = reader.ReadToEnd();
    richTextBox1.Text = s;
    /*
     <StuDataContract xmlns="http://schemas.datacontract.org/2004/07/SerializbleDemo" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ID>1001</ID><StuName>小明</StuName><Age>23</Age></StuDataContract>
     */
}

在这里插入图片描述

5.基于契约序列化 DataContractJson

  • 对象类
using System.Runtime.Serialization;

namespace SerializbleDemo
{
    [DataContract]//添加特性
    public class StuDataContractJson
    {
        [DataMember(Order =0)]
        public int ID { get; set; }
        [DataMember(Order =1)]
        public string StuName { get; set; }
        [DataMember(Order = 2)]
        public int Age { get; set; }
    }
}

  • 序列化实现
/// <summary>
/// 序列化 StuDataContractJson
/// </summary>
private void StuDataContractJsonSerializable()
{
    var stu = new StuDataContractJson()
    {
        ID = 1001,
        StuName = "小红",
        Age = 26
    };

    var ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(StuDataContractJson));
    //内存器
    var ms = new MemoryStream();

    ser.WriteObject(ms, stu);
    ms.Position = 0;
    var reader = new StreamReader(ms);
    var s = reader.ReadToEnd();
    //  {"ID":1001,"StuName":"小红","Age":26}
    richTextBox1.Text = s;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值