在C#中,序列化是将对象的状态信息转换为可以存储或传输的形式的过程,其逆过程称为反序列化。以下是三种常用的C#序列化方法简介及简单示例:
### 1. 二进制序列化(Binary Serialization)
二进制序列化使用 `BinaryFormatter` 类将对象及其所有成员变量(包括私有成员)序列化为一个字节流。这种方式速度快,但生成的序列化数据是特定于.NET的,不易于跨平台或跨语言使用。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable] // 必须标记为可序列化
public class MyClass
{
public int MyField = 1;
// 其他成员...
}
public class Program
{
public static void Main()
{
MyClass obj = new MyClass();
// 序列化
BinaryFormatter bf = new BinaryFormatter();
using (FileStream fs = new FileStream("data.bin", FileMode.Create))
{
bf.Serialize(fs, obj);
}
// 反序列化(此处省略)
}
}
### 2. XML 序列化(XML Serialization)
XML序列化使用 `XmlSerializer` 类将对象的公共属性和字段(不序列化私有成员)序列化为XML格式的数据。这种方式生成的数据易于阅读且跨平台,但可能不如二进制序列化效率高。
using System;
using System.IO;
using System.Xml.Serialization;
[XmlRoot("MyClass")] // 可选,指定XML根节点名称
public class MyClass
{
public int MyField = 1;
// 其他公共成员...
}
public class Program
{
public static void Main()
{
MyClass obj = new MyClass();
// 序列化
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
using (FileStream fs = new FileStream("data.xml", FileMode.Create))
{
serializer.Serialize(fs, obj);
}
// 反序列化(此处省略)
}
}
### 3. JSON 序列化(JSON Serialization)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在C#中,可以使用如 `Newtonsoft.Json`(现已更名为 `Json.NET`)或 `System.Text.Json`(.NET Core 3.0及更高版本引入)等库进行JSON序列化。
#### 使用 System.Text.Json
using System;
using System.IO;
using System.Text.Json;
public class MyClass
{
public int MyField = 1;
// 其他公共成员...
}
public class Program
{
public static void Main()
{
MyClass obj = new MyClass();
// 序列化
string jsonString = JsonSerializer.Serialize(obj);
// 反序列化(此处省略)
// 写入文件(示例)
File.WriteAllText("data.json", jsonString);
}
}
注意:上述代码示例中,二进制和XML序列化的反序列化部分没有包含,因为它们需要额外的代码来从存储介质中读取数据并反序列化为对象。JSON序列化的反序列化也是类似的,但通常更简洁,因为JSON字符串可以直接被解析为对象。