写一个序列化和反序列化的C#方法并附带案例
时间: 2023-07-18 14:31:02 浏览: 46
好的,以下是一个简单的序列化和反序列化方法的示例:
```csharp
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class MyClass
{
public string Name { get; set; }
public int Age { get; set; }
}
public static class SerializationHelper
{
public static void SerializeToFile<T>(T obj, string fileName)
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
formatter.Serialize(stream, obj);
}
}
public static T DeserializeFromFile<T>(string fileName)
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
return (T)formatter.Deserialize(stream);
}
}
}
```
上述代码中,定义了一个名为MyClass的可序列化类,包含了两个属性Name和Age。接着定义了一个静态类SerializationHelper,其中包含了两个静态方法SerializeToFile和DeserializeFromFile,分别用于序列化和反序列化对象到文件中。SerializeToFile方法接收一个泛型对象和文件名,将对象序列化到指定文件中;DeserializeFromFile方法接收一个文件名,从文件中反序列化对象并返回。
下面是一个简单的示例,演示如何使用这两个方法:
```csharp
public static void Main(string[] args)
{
MyClass obj = new MyClass { Name = "张三", Age = 20 };
SerializationHelper.SerializeToFile(obj, "data.bin");
MyClass newObj = SerializationHelper.DeserializeFromFile<MyClass>("data.bin");
Console.WriteLine("Name: " + newObj.Name);
Console.WriteLine("Age: " + newObj.Age);
}
```
上述示例中,首先创建了一个MyClass对象,并使用SerializeToFile方法将其序列化到"data.bin"文件中。接着使用DeserializeFromFile方法从文件中反序列化出一个新的对象newObj,并输出其属性值。运行结果如下:
```
Name: 张三
Age: 20
```
这就完成了一个简单的序列化和反序列化方法的示例。需要注意的是,这里使用了BinaryFormatter进行序列化和反序列化,而BinaryFormatter使用了二进制格式进行序列化,因此序列化后的数据是不可读的,只能用于反序列化。如果需要可读性更好的序列化格式,可以考虑使用JSON或XML等格式进行序列化。