当前位置:8288分类目录 » 站长资讯 » SEO » 文章详细

C#序列化与反序列化(c序列化与反序列化的几种方法)

来源:网络转载 浏览:68570次 时间:2023-12-20

C#序列化与反序列化:简单易懂的解释


分类目录


在编程中,我们经常需要将数据从一种形式转换为另一种形式。其中一个常见的情况是将对象转换为一系列字节以便存储或传输,或者从字节重新创建对象。这个过程称为序列化和反序列化。在C#中,我们可以使用内置的序列化器和反序列化器来实现这些操作。

1. 序列化

序列化是将对象转换为字节流的过程。当我们需要将对象存储在硬盘上或通过网络传输时,将对象序列化为字节流非常有用。

首先,我们需要将类标记为可序列化。只需在类定义前面添加 `[Serializable]` 属性即可。例如:

```csharp

[Serializable]

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

```

接下来,我们可以使用`BinaryFormatter`类来进行序列化操作。这里我们将一个`Person`对象序列化为字节流:

```csharp

Person person = new Person { Name = "张三", Age = 25 };

BinaryFormatter formatter = new BinaryFormatter();

MemoryStream stream = new MemoryStream();

formatter.Serialize(stream, person);

byte[] bytes = stream.ToArray();

// 将字节数组保存到文件或通过网络发送

```

在上述示例中,我们创建了一个`Person`对象并将其序列化为内存流中。然后,我们可以通过调用`ToArray()`方法将内存流转换为字节数组,并且可以将其保存到文件或传输到其他位置。

2. 反序列化

反序列化是将字节流转换回对象的过程。当我们接收到一个字节流并想要还原成对象时,就需要进行反序列化操作。

让我们使用相同的`Person`类作为示例,将字节数组反序列化为一个`Person`对象:

```csharp

byte[] bytes; // 从文件或网络接收的字节数组

BinaryFormatter formatter = new BinaryFormatter();

MemoryStream stream = new MemoryStream(bytes);

Person person = (Person)formatter.Deserialize(stream);

Console.WriteLine($"姓名:{person.Name},年龄:{person.Age}");

```

在上述示例中,我们首先将字节数组放入内存流中。然后,我们使用反序列化器的`Deserialize()`方法将内存流转换为`Person`对象。

3. XML 和 JSON 序列化

除了使用二进制格式进行序列化和反序列化之外,C# 还支持将对象序列化为 XML 或 JSON 格式。这些格式对于与其他平台或语言进行交互非常有用。

XML 序列化和反序列化:

```csharp

[Serializable]

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

Person person = new Person { Name = "张三", Age = 25 };

XmlSerializer serializer = new XmlSerializer(typeof(Person));

using (TextWriter writer = new StreamWriter("person.xml"))

{

serializer.Serialize(writer, person);

}

// 反序列化

Person deserializedPerson;

using (TextReader reader = new StreamReader("person.xml"))

{

deserializedPerson = (Person)serializer.Deserialize(reader);

}

```

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

```csharp

[Serializable]

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

Person person = new Person { Name = "张三", Age = 25 };

string json = JsonConvert.SerializeObject(person);

// 将 json 字符串保存到文件或通过网络发送

// 反序列化

Person deserializedPerson = JsonConvert.DeserializeObject(json);

```

总结:

C#的序列化和反序列化功能非常强大,它允许我们将对象转换为字节流以便存储、传输和与其他平台进行交互。无论是使用二进制格式、XML还是JSON,我们都能够使用内置的序列化器和反序列化器实现这些操作。希望本文对你理解C#序列化和反序列化有所帮助!



8288分类目录声明:本站部分文章来源于网络,版权属于原作者所有。如有转载或引用文章/图片涉及版权问题,请联系我们处理.我们将在第一时间删除! 联系邮箱:tsk@qq.com

推荐网站

最新加入网站 TOP5

入站排行榜 TOP5