序列化与反序列化xml bin

1、XML

XML(可扩展标记语言)序列化是一种将对象的数据结构转换为XML格式的过程,以便将其存储在文件中、通过网络传输或与其他系统进行数据交换。在C#中,你可以使用.NET框架提供的XmlSerializer类来执行对象到XML的序列化和XML到对象的反序列化操作。

csharp 复制代码
using System;
using System.IO;
using System.Xml.Serialization;

// 定义一个简单的类
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        // 创建一个Person对象
        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);
        }
        Console.WriteLine("Serialization complete.");

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

在这个示例中,我们首先定义了一个简单的Person类,然后使用XmlSerializer类来序列化和反序列化Person对象。序列化操作将Person对象的数据保存为XML文件,而反序列化操作则将XML文件的内容转换回Person对象。

请注意,要在类上进行XML序列化,类需要满足一些要求,例如需要是可公开序列化的,通常可以使用Serializable属性来标记。在.NET中,还可以使用其他属性和注解来更详细地控制序列化的方式和结果。

总之,XML序列化是一种在C#中将对象转换为XML格式的常用技术,用于数据的存储、传输和交换。

2、Bin

使用 BinaryFormatter 类进行二进制序列化和反序列化。

  1. 引入命名空间: 确保在代码文件的顶部引入以下命名空间,以便可以使用 BinaryFormatter 类和相关类型。
csharp 复制代码
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
1. 定义要序列化的类: 首先,你需要定义一个类,该类将要被序列化和反序列化。这个类需要标记为 [Serializable] 特性,以指示它可以被二进制序列化。
csharpCopy code
[Serializable]
public class Data
{
    public int Number { get; set; }
    public string Text { get; set; }
}
2. 序列化: 在序列化时,你将对象写入到一个文件流中。
csharpCopy code
Data data = new Data { Number = 42, Text = "Hello, Binary Serialization!" };

BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream("data.bin", FileMode.Create))
{
    formatter.Serialize(fs, data);
    Console.WriteLine("Serialization complete.");
}


3. 反序列化: 在反序列化时,你从文件流中读取二进制数据,并将其转换回对象。
csharpCopy code
Data deserializedData;
using (FileStream fs = new FileStream("data.bin", FileMode.Open))
{
    deserializedData = (Data)formatter.Deserialize(fs);
    Console.WriteLine($"Deserialized: Number={deserializedData.Number}, Text={deserializedData.Text}");
}

注意事项:

● 二进制序列化会将对象的所有字段和属性存储为二进制数据。这使得数据不太容易人类可读,但效率较高。

● 被序列化的类需要有一个无参数的构造函数,以便在反序列化时可以实例化对象。

● 在实际应用中,可能需要对异常进行适当的处理,例如处理文件不存在或格式不正确的情况。

总之,BinaryFormatter 类允许你在C#中进行二进制序列化和反序列化,从而在不同的应用程序之间存储和交换数据。然而,需要注意安全性和兼容性的问题,尤其是在跨应用程序、跨版本和跨平台的情况下。

相关推荐
平常心的技术小牛2 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆2 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
余额瞒着我当琳4 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪4 小时前
WebClient内存配置解析
开发语言·springboot·webflux
jdksjw5 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠5 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
SL-staff5 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
SomeB1oody6 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
进制树7 小时前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计
牛马也想出海7 小时前
亚马逊爬虫代理IP:IP类型选择与配置指南
开发语言·php