.NET序列化学习

本文深入探讨了.NET平台下两种强大的序列化技术:二进制序列化和XML序列化,包括实现原理、关键代码示例以及注意事项。通过详细解析,帮助开发者掌握如何高效地将对象持久化,以便实现永久存储和远程值传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**序列化:将(数据)对象转换为可存储或者可传输格式的过程。
反序列化:从物质介质或流(stream)上获取数据(对象)。
目的:将对象持久化(持久化的对象就可以实现永久的存储和值封送)。**

.NET提供2种强大的序列化技术:一种是二进制序列化,另一种是XML序列化。

System.Runtime.Serialization,用于实现二进制序列化,其中IFormatter接口提供了对象序列化的功能,BinaryFormatter和SoapFormatter分别用于将对象序列化为二进制格式和Soap格式。

  • 二进制序列化Demo:
    [Serializable]
    public class UserInfo
    {
        public string Name;
        public Int32 Age;
        public bool IsVip;

        public UserInfo(string name, Int32 age, bool isVip)
        {
            Name = name;
            Age = age;
            IsVip = isVip;
        }
    }    
    class Program
    {
        static void Main(string[] args)
        {
            BinarySerialize(new UserInfo("wq", 26, false));
            var user = BinaryDeserialize();
        }
        static void BinarySerialize(UserInfo user)
        {
            var fileStream = new FileStream("MySerialize.bin", FileMode.Create);
            var formatter = new BinaryFormatter();

            formatter.Serialize(fileStream, user);
            fileStream.Close();
        }

        static UserInfo BinaryDeserialize()
        {
            var fileStream = new FileStream("MySerialize.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
            var formatter = new BinaryFormatter();

            var user = formatter.Deserialize(fileStream) as UserInfo;
            fileStream.Close();
            return user;
        }
    }

System.Xml.Serialization,用于实现XML序列化,其中最重要的类型为XmlSerializer类,它提供了相应的Serialize方法和Deserialize方法来完成XML格式的序列化和反序列化。(注意:1、XML序列化不能完成方法,索引器,私有字段和制度属性的序列化,而必须由二进制序列化完成。2、需要序列化的对象必须有无参数的构造函数。)

  • XML序列化Demo
    [Serializable]
    public class UserInfo
    {
        private string Name;//该字段不会再XML中显示
        public Int32 Age;
        public bool IsVip;

        public UserInfo(){}//必须提供无参构造器,否则XmlSerializer将出错
        public UserInfo(string name, Int32 age, bool isVip)
        {
            Name = name;
            Age = age;
            IsVip = isVip;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
             var xmlSerializer = new XmlSerializer(typeof(UserInfo));
            var streamWriter = new StreamWriter("MySerialize.txt");
            xmlSerializer.Serialize(streamWriter, user);
            streamWriter.Close();

            var fileStream = new FileStream("MySerialize.txt", FileMode.Open);
            var a = xmlSerializer.Deserialize(fileStream) as UserInfo;
            fileStream.Close();
        }
    }

此处参考自:你必须知道的.NET(第二版) 作者:王涛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值