c# Stream转object
时间: 2024-09-11 12:18:26 浏览: 117
在C#中,将一个Stream转换成一个对象通常涉及到序列化和反序列化的过程。序列化是指将对象状态转换为可以存储或传输的形式的过程。在.NET中,可以使用多种方式来实现这一过程,最常见的是使用`BinaryFormatter`、`SoapFormatter`或`JSON.NET`(`Newtonsoft.Json`)等类库。下面我会给出使用`BinaryFormatter`和`JSON.NET`两种方式的示例:
1. 使用`BinaryFormatter`进行序列化和反序列化:
```csharp
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
// 假设有一个Object实例
object myObject = new MyObject();
// 创建一个MemoryStream来作为存储流
MemoryStream stream = new MemoryStream();
// 创建BinaryFormatter实例
BinaryFormatter formatter = new BinaryFormatter();
// 序列化对象到流中
formatter.Serialize(stream, myObject);
// 将流的指针重新定位到开始位置,准备读取
stream.Position = 0;
// 反序列化流回对象
object deserializedObject = formatter.Deserialize(stream);
// 关闭流
stream.Close();
```
2. 使用`JSON.NET`(`Newtonsoft.Json`)进行序列化和反序列化:
```csharp
using Newtonsoft.Json;
using System.IO;
using System;
// 假设有一个对象实例
MyObject myObject = new MyObject();
// 创建一个MemoryStream来作为存储流
MemoryStream stream = new MemoryStream();
// 创建StreamWriter来写入流
StreamWriter writer = new StreamWriter(stream);
// 使用JSON.NET将对象序列化到流中
JsonConvert.SerializeObject(myObject, writer);
// 刷新流确保所有的数据都被写入
writer.Flush();
// 将流的指针重新定位到开始位置,准备读取
stream.Position = 0;
// 使用StreamReader读取流
StreamReader reader = new StreamReader(stream);
string jsonResult = reader.ReadToEnd();
// 反序列化JSON字符串回对象
MyObject deserializedObject = JsonConvert.DeserializeObject<MyObject>(jsonResult);
// 关闭所有流
stream.Close();
writer.Close();
reader.Close();
```
在使用这些方法时,需要注意`BinaryFormatter`是已标记为不安全的,并且在未来的版本中可能会被移除,因此在新项目中推荐使用如`JSON.NET`这样的库进行序列化和反序列化。
阅读全文