• asp.net中对象的序列化,方便网络传输


    对象序列化 是将对象状态转换为可保持或传输的格式的过程。
    反序列化 是将流转换为对象
    序列化和反序列化相结合
    可以使对象数据轻松的存储和传递

    在 .NET 中,如果是对象可序列化,需要在 声明对象的开始部分加上 [Serializable]
    这个属性,并且不能被继承
    如一个类

    [Serializable]
    public class
    A
    {
        public string title;
    }

    public class B :
    A
    {
        public int total;
    }

    则 对象B 不可被序列化


    .NET 提供了3种序列化的方式 BinaryFormatter, SoapFormatter和 XmlSerializer
    ,下面对这3种方式分别以代码形式做介绍

    预备工作:
    创建一个 实体对象
    [Serializable]
    public class
    Entity
    {
        private int _total;
       
    private string _title;
        private double
    _timeCount;
        private int
    _pageCount;

        public Entity()
       
    {
        }

        public int
    Total
        {
            get
    { return _total; }
            set { _total =
    value; }
        }

        public string
    Title
        {
            get
    { return _title; }
            set { _title =
    value; }
        }

        public double
    TimeCount
        {
           
    get { return _timeCount; }
            set {
    _timeCount = value; }
        }

        public
    int PageCount
       
    {
            get { return _pageCount;
    }
            set { _pageCount = value;
    }
        }
    }


    1. BinaryFormatter
    说明: 需要引入命名空间
    System.Runtime.Serialization 和
    System.Runtime.Serialization.Formatters.Binary

           
    //序列化对象
            Entity entity = new
    Entity();
            entity.Total =
    10;
            entity.Title =
    "测试";
            entity.TimeCount =
    0.18;
            entity.PageCount =
    5;

            IFormatter formatter = new
    BinaryFormatter();
            Stream stream =
    new FileStream(@"D:程序DotNet技术PDSource框架WebSerializermyFile.txt",
    FileMode.Create, FileAccess.Write,
    FileShare.None);

           
    formatter.Serialize(stream,
    entity);
           
    stream.Close();

           
    //反序列化对象
            IFormatter formatter1 =
    new BinaryFormatter();
            Stream
    stream1 = new FileStream(@"D:程序DotNet技术PDSource框架WebSerializermyFile.txt",
    FileMode.Open, FileAccess.Read,
    FileShare.Read);
            Entity entity1 =
    (Entity)formatter1.Deserialize(stream1);
           
    stream1.Close();

           
    Response.Write(entity1.Total + "
    " + entity1.Title + "
    " +
    entity1.TimeCount + "
    " + entity1.PageCount);

    2. SoapFormatter
    说明:
    需要引入命名空间 System.Runtime.Serialization 和
    System.Runtime.Serialization.Formatters.Soap

           
    //序列化对象
            Entity entity = new
    Entity();
            entity.Total =
    10;
            entity.Title =
    "测试";
            entity.TimeCount =
    0.18;
            entity.PageCount =
    5;

            IFormatter formatter = new
    SoapFormatter();
            Stream stream = new FileStream(@"D:程序DotNet技术PDSource框架WebSerializermyFile2.txt", FileMode.Create, FileAccess.Write, FileShare.None);

           
    formatter.Serialize(stream,
    entity);

           
    stream.Close();

           
    //反序列化对象
            IFormatter formatter1 =
    new SoapFormatter();
            Stream
    stream1 = new
    FileStream(@"D:程序DotNet技术PDSource框架WebSerializermyFile2.txt",
    FileMode.Open, FileAccess.Read,
    FileShare.Read);
            Entity entity1 =
    (Entity)formatter1.Deserialize(stream1);
           
    stream1.Close();

           
    Response.Write(entity1.Total + "
    " + entity1.Title + "
    " +
    entity1.TimeCount + "
    " + entity1.PageCount);

    3. XmlSerializer
    说明:
    需要引入命名空间
    System.Xml.Serialization

           
    //序列化对象
            Entity entity = new
    Entity();
            entity.Total =
    10;
            entity.Title =
    "测试";
            entity.TimeCount =
    0.18;
            entity.PageCount =
    5;

            XmlSerializer formatter =
    new XmlSerializer(typeof(Entity));
            Stream stream = new FileStream(@"D:程序DotNet技术PDSource框架WebSerializermyFile3.xml", FileMode.Create, FileAccess.Write, FileShare.None);
           
    formatter.Serialize(stream,
    entity);
           
    stream.Close();

           
    //反序列化对象
            XmlSerializer formatter1
    = new
    XmlSerializer(typeof(Entity));
           
    Stream stream1 = new
    FileStream(@"D:程序DotNet技术PDSource框架WebSerializermyFile3.xml",
    FileMode.Open, FileAccess.Read,
    FileShare.Read);

           
    stream1.Seek(0,
    SeekOrigin.Begin);

            Entity
    entity1 =
    (Entity)formatter1.Deserialize(stream1);
           
    stream1.Close();

           
    Response.Write(entity1.Total + "
    " + entity1.Title + "
    " +
    entity1.TimeCount + "
    " + entity1.PageCount);

  • 相关阅读:
    install kde in ubuntu
    Upgrade to or Install Cinnamon 2.4 in Ubuntu
    enjoy dollar vs cash dollar
    opencv linux
    高频交易都有哪些著名的算法
    wpf
    opencv mat flags含义
    gphoto2 canon eos450d
    gphoto2
    task optimization之superglue分析
  • 原文地址:https://www.cnblogs.com/ysq0908/p/6028583.html
Copyright © 2020-2023  润新知