c#怎样序列化和反序列化
时间: 2023-11-18 07:57:37 浏览: 103
C#中的序列化和反序列化是.NET运行时环境用来支持用户定义类型的流化的机制。序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候再把介质中的东西还原成对象。在进行这些操作的时候都需要这个可以被序列化,要能被序列化,就得给类头加[Serializable]特性。下面是C#中序列化和反序列化的方法:
1.使用BinaryFormatter进行序列化和反序列化,BinaryFormatter是.NET Framework中的一个类,它可以将对象序列化为二进制流,也可以将二进制流反序列化为对象。
```csharp
//序列化
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public static void SerializeObject(string filename, object obj)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(filename, FileMode.Create))
{
formatter.Serialize(stream, obj);
}
}
//反序列化
public static object DeserializeObject(string filename)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(filename, FileMode.Open))
{
return formatter.Deserialize(stream);
}
}
```
2.使用DataContractSerializer进行序列化和反序列化,DataContractSerializer是.NET Framework中的一个类,它可以将对象序列化为XML格式,也可以将XML格式反序列化为对象。
```csharp
//序列化
using System.IO;
using System.Runtime.Serialization;
using System.Xml;
public static void SerializeObject(string filename, object obj)
{
DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
using (XmlWriter writer = XmlWriter.Create(filename))
{
serializer.WriteObject(writer, obj);
}
}
//反序列化
public static object DeserializeObject(string filename, Type type)
{
DataContractSerializer serializer = new DataContractSerializer(type);
using (XmlReader reader = XmlReader.Create(filename))
{
return serializer.ReadObject(reader);
}
}
```
3.使用Json.NET进行序列化和反序列化,Json.NET是一个流行的第三方JSON库,它可以将对象序列化为JSON格式,也可以将JSON格式反序列化为对象。
```csharp
//序列化
using Newtonsoft.Json;
public static void SerializeObject(string filename, object obj)
{
string json = JsonConvert.SerializeObject(obj);
File.WriteAllText(filename, json);
}
//反序列化
public static object DeserializeObject(string filename, Type type)
{
string json = File.ReadAllText(filename);
return JsonConvert.DeserializeObject(json, type);
}
```
阅读全文