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

c#序列化与反序列化(c#序列化与反序列化的目的)

来源:网络转载 浏览:52998次 时间:2023-12-16

C#序列化与反序列化:简单解析与应用


分类目录


在软件开发中,我们经常需要将对象转换为字节流以便于传输或存储,并且有时还需要将字节流还原为对象。这个过程就是序列化和反序列化。而在C#中,序列化与反序列化是非常常见和重要的技术。本文将以通俗易懂的方式解析C#序列化与反序列化,并介绍其应用。

一、什么是序列化与反序列化?

序列化是指将对象转换为字节流的过程,可以将对象保存到文件、数据库或通过网络发送给其他机器。反序列化则是将字节流转换为对象的过程,从而可以重新使用该对象。这种技术使得我们能够方便地进行数据持久化和远程调用。

二、C#序列化的实现方式

在C#中,要实现序列化和反序列化,我们可以使用.NET框架提供的两种方法:BinaryFormatter和DataContractSerializer。

1. BinaryFormatter:这是.NET框架中最常用的序列化工具之一。它将对象序列化为二进制格式,并且支持将对象保存到文件或通过网络传输。下面是一个简单的示例:

```

using System;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

[Serializable]

class Person

{

public string Name { get; set; }

public int Age { get; set; }

}

class Program

{

static void Main()

{

Person person = new Person()

{

Name = "小明",

Age = 18

};

BinaryFormatter formatter = new BinaryFormatter();

using (FileStream stream = new FileStream("person.bin", FileMode.Create))

{

formatter.Serialize(stream, person);

}

}

}

```

以上代码将一个名为Person的对象序列化为二进制流,并保存到名为person.bin的文件中。

2. DataContractSerializer:这是另一种常用的序列化工具,它将对象序列化为XML格式,并且支持将对象保存到文件或传输给其他应用程序。下面是一个简单的示例:

```

using System;

using System.IO;

using System.Runtime.Serialization;

using System.Xml;

[DataContract]

class Person

{

[DataMember]

public string Name { get; set; }

[DataMember]

public int Age { get; set; }

}

class Program

{

static void Main()

{

Person person = new Person()

{

Name = "小明",

Age = 18

};

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

using (XmlWriter writer = XmlWriter.Create("person.xml"))

{

serializer.WriteObject(writer, person);

}

}

}

```

以上代码将一个名为Person的对象序列化为XML格式,并保存到名为person.xml的文件中。

三、C#反序列化的实现方式

与序列化相对应,C#提供了对应的反序列化方法来还原对象。

1. BinaryFormatter:

```

BinaryFormatter formatter = new BinaryFormatter();

using (FileStream stream = new FileStream("person.bin", FileMode.Open))

{

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

Console.WriteLine(person.Name);

Console.WriteLine(person.Age);

}

```

以上代码从名为person.bin的文件中读取二进制流,并将其反序列化为Person对象。

2. DataContractSerializer:

```

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

using (XmlReader reader = XmlReader.Create("person.xml"))

{

Person person = (Person)serializer.ReadObject(reader);

Console.WriteLine(person.Name);

Console.WriteLine(person.Age);

}

```

以上代码从名为person.xml的文件中读取XML流,并将其反序列化为Person对象。

四、应用实例:保存和读取用户设置

通过序列化和反序列化,我们可以轻松地保存和读取用户的设置信息。以下是一个示例:

```

using System;

using System.IO;

using System.Runtime.Serialization;

using System.Xml;

[DataContract]

class UserSettings

{

[DataMember]

public string Username { get; set; }

[DataMember]

public bool RememberPassword { get; set; }

// 更多设置项...

}

class Program

{

static void SaveUserSettings(UserSettings settings)

{

DataContractSerializer serializer = new DataContractSerializer(typeof(UserSettings));

using (XmlWriter writer = XmlWriter.Create("settings.xml"))

{

serializer.WriteObject(writer, settings);

}

}

static UserSettings LoadUserSettings()

{

DataContractSerializer serializer = new DataContractSerializer(typeof(UserSettings));

using (XmlReader reader = XmlReader.Create("settings.xml"))

{

return (UserSettings)serializer.ReadObject(reader);

}

}

static void Main()

{

UserSettings settings = new UserSettings()

{

Username = "xiaoming",

RememberPassword = true

};

SaveUserSettings(settings);

UserSettings loadedSettings = LoadUserSettings();

Console.WriteLine(loadedSettings.Username);

Console.WriteLine(loadedSettings.RememberPassword);

}

}

```

以上代码将用户的设置对象序列化为XML格式,并保存到settings.xml文件中。当程序再次运行时,可以通过反序列化读取之前保存的设置信息。

总结:

本文简单解析了C#序列化与反序列化的概念和实现方式,并介绍了一个应用实例。通过使用C#的序列化和反序列化技术,我们可以轻松地将对象转换为字节流进行存储或传输,并实现数据的持久化和远程调用。希望本文能够帮助读者更好地理解和应用C#序列化与反序列化的知识。



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

推荐网站

最新加入网站 TOP5

入站排行榜 TOP5