C# 序列化

发布于:2024-05-18 ⋅ 阅读:(172) ⋅ 点赞:(0)

一、序列化的三种方式

本来C++学的好好的,工作需要又要学C# 

C# 序列化&反序列化_c#将字符串序列化-CSDN博客

为啥要序列化

1、数据持久化

2、数据传输

3、跨平台和语言交互

序列化的三种方式

二进制序列化:

就是将对象或者数据列为二进制的格式,将所有的内容都会序列化,常用于socket 流

XML序列化

使用XMLSerializer类将数据放到xml 中,可读性更强但是数据量比较大

Json 序列化

同理就是使用JsonSerializer将对象或者类写入成json格式,比较紧凑,使用于传输,现在经常用于web传输数据

二、BinaryFormatter序列化

  [Serializable]  // 可以序列化
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

    }

    public static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {

            byte[] serdata;
            Person person = new Person { Name="Alse",Age=34};
            // 二进制序列化
            BinaryFormatter formater = new BinaryFormatter();
            using (MemoryStream stream=new MemoryStream())
            {
                formater.Serialize(stream,person);
                serdata = stream.ToArray();
                
            }



            using (MemoryStream stream=new MemoryStream(serdata))
            {
                Person dp = (Person)formater.Deserialize(stream);
            }
        
        }
    }

三、XML序列化

  //===========================================================================================================
            // XML序列化
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));
            using (TextWriter write=new StreamWriter("person.xml"))
            {
                xmlSerializer.Serialize(write,person);
            }

            // XML反序列化
            using (TextReader reader=new StreamReader("person.xml"))
            {
                Person p = (Person)xmlSerializer.Deserialize(reader);
            }



                Application.Run(new Form1());
        }

四、Json 序列化

.NET中的序列化和反序列化详解 - 重庆熊猫 - 博客园 (cnblogs.com)

           // Json序列化
            string Jsonstring = JsonConvert.SerializeObject(person);

            var des = JsonConvert.DeserializeObject(Jsonstring);



            //
            Student student = new Student { Name="albert",Age=28,Id=1234566};
   

            //序列化数据
            //新建文件流
            string filePath = @".\student.json";
            using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate))
            {
                //新建序列化对象
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Student));

                //进行序列化
                dataContractJsonSerializer.WriteObject(fileStream, student);
            }

            // 反序列化
            //新建文件流
            using (FileStream fileStream1 = new FileStream(filePath, FileMode.Open))
            {
                //新建序列化对象
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Student));

                //进行反序列化
                Student student1 = (Student)dataContractJsonSerializer.ReadObject(fileStream1);

            }


网站公告

今日签到

点亮在社区的每一天
去签到