温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中序列化与反序列化怎么做

发布时间:2025-02-15 22:46:43 阅读:89 作者:小樊 栏目:编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在C#中,序列化是将对象转换为可以存储或传输的格式的过程,而反序列化则是将这种格式的数据转换回对象的过程。常用的序列化格式包括JSON、XML和二进制等。下面是一些常用的方法和示例代码:

JSON序列化与反序列化

使用Newtonsoft.Json库(也称为Json.NET)是最常见的做法。

安装Newtonsoft.Json

你可以通过NuGet包管理器安装:

Install-Package Newtonsoft.Json

序列化示例

using Newtonsoft.Json;
using System;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };

        // 序列化
        string jsonString = JsonConvert.SerializeObject(person);
        Console.WriteLine(jsonString); // 输出: {"Name":"John Doe","Age":30}
    }
}

反序列化示例

using Newtonsoft.Json;
using System;

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

class Program
{
    static void Main()
    {
        string jsonString = "{\"Name\":\"John Doe\",\"Age\":30}";

        // 反序列化
        Person person = JsonConvert.DeserializeObject<Person>(jsonString);
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // 输出: Name: John Doe, Age: 30
    }
}

XML序列化与反序列化

使用System.Xml.Serialization命名空间中的类。

序列化示例

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 = "John Doe", Age = 30 };

        // 序列化
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        using (StringWriter writer = new StringWriter())
        {
            serializer.Serialize(writer, person);
            string xmlString = writer.ToString();
            Console.WriteLine(xmlString);
        }
    }
}

反序列化示例

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()
    {
        string xmlString = "<Person><Name>John Doe</Name><Age>30</Age></Person>";

        // 反序列化
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        using (StringReader reader = new StringReader(xmlString))
        {
            Person person = (Person)serializer.Deserialize(reader);
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // 输出: Name: John Doe, Age: 30
        }
    }
}

二进制序列化与反序列化

使用System.IO.BinaryFormatter类。

序列化示例

using System;
using System.IO;
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 = "John Doe", Age = 30 };

        // 序列化
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream("person.bin", FileMode.Create))
        {
            formatter.Serialize(stream, person);
        }
    }
}

反序列化示例

using System;
using System.IO;
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()
    {
        // 反序列化
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream("person.bin", FileMode.Open))
        {
            Person person = (Person)formatter.Deserialize(stream);
            Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // 输出: Name: John Doe, Age: 30
        }
    }
}

请注意,BinaryFormatter在.NET Core和.NET 5+中已被弃用,建议使用其他序列化方法,如JSON或XML。

选择哪种序列化方法取决于你的具体需求,例如数据格式、性能要求和兼容性等。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×