c#序列化,反序列化,及示例

在C#中,序列化和反序列化是用于将对象转换为字节流或从字节流转换回对象的过程。在 .NET 中,常用的序列化和反序列化方式包括 XML 序列化、JSON 序列化和二进制序列化。

  1. XML 序列化和反序列化示例:

using System;
using System.IO;
using System.Xml.Serialization;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        // 序列化
        Person person = new Person { Name = "Alice", Age = 30 };
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        using (TextWriter writer = new StreamWriter("person.xml"))
        {
            serializer.Serialize(writer, person);
        }

        // 反序列化
        using (TextReader reader = new StreamReader("person.xml"))
        {
            Person deserializedPerson = (Person)serializer.Deserialize(reader);
            Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        }
    }
}

2.JSON 序列化和反序列化示例(使用 Newtonsoft.Json 库): 

using System;
using Newtonsoft.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        // 序列化
        Person person = new Person { Name = "Bob", Age = 25 };
        string json = JsonConvert.SerializeObject(person);
        File.WriteAllText("person.json", json);

        // 反序列化
        string jsonText = File.ReadAllText("person.json");
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonText);
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}

 3.二进制序列化和反序列化示例:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        // 序列化
        Person person = new Person { Name = "Charlie", Age = 40 };
        IFormatter formatter = new BinaryFormatter();
        using (Stream stream = new FileStream("person.bin", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            formatter.Serialize(stream, person);
        }

        // 反序列化
        using (Stream stream = new FileStream("person.bin", FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            Person deserializedPerson = (Person)formatter.Deserialize(stream);
            Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        }
    }
}

在C#中,序列化和反序列化的作用主要有以下几个方面:

  1. 数据持久化:通过将对象转换为字节流(序列化),可以将对象的状态保存到文件、数据库或内存中,以便在需要时能够将对象重新加载到内存中(反序列化)。

  2. 数据传输:将对象序列化为字节流后,可以在网络上传输,或者在不同应用程序之间进行通信。接收方可以通过反序列化将字节流还原为对象。

  3. 跨平台和跨语言通信:通过序列化和反序列化,可以将对象转换为通用的格式(如XML、JSON、二进制),从而在不同平台或使用不同编程语言的系统之间进行数据交换和通信。

  4. 对象复制:通过序列化和反序列化,可以实现对象的深拷贝,即创建一个与原始对象完全相同的新对象,这对于某些特定的操作和场景非常有用。

总的来说,序列化和反序列化的作用是在不同的应用和系统之间传输和存储对象,以及保持对象的状态和数据。这为软件开发和系统集成提供了很大的便利性。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值