定义一个Person类,有姓名、年龄、工作信息(工号、部门、职位)属性,工作信息定义在Work类中,Person类中有Work类型的属性。 请设计一个Person数组,序列化到文件。从文件反序列化读取,并对数据进行校验。 提示:本题有两个类。 [Serializable] class Work { public string Id { get; set; } public string Department { get; set; } public string Position { get; set; } } [Serializable] class Person { public string Name { get; set; } public int Age { get; set; } public Work Info { get; set; } }
时间: 2024-02-01 16:01:55 浏览: 90
好的,这道题目涉及到了序列化、反序列化以及数据校验等知识点。下面是解决该问题的代码:
```
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace PersonDemo
{
[Serializable]
class Work
{
public string Id { get; set; }
public string Department { get; set; }
public string Position { get; set; }
}
[Serializable]
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Work Info { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 创建Person数组
Person[] persons = new Person[]
{
new Person
{
Name = "张三",
Age = 30,
Info = new Work
{
Id = "1001",
Department = "技术部",
Position = "程序员"
}
},
new Person
{
Name = "李四",
Age = 35,
Info = new Work
{
Id = "1002",
Department = "市场部",
Position = "销售"
}
}
};
// 将Person数组序列化到文件
string fileName = "person.dat";
using (FileStream stream = new FileStream(fileName, FileMode.Create))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, persons);
}
// 从文件反序列化读取Person数组
using (FileStream stream = new FileStream(fileName, FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
Person[] newPersons = (Person[])formatter.Deserialize(stream);
// 对数据进行校验
foreach (Person person in newPersons)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
Console.WriteLine($"Info: Id: {person.Info.Id}, Department: {person.Info.Department}, Position: {person.Info.Position}");
}
}
}
}
}
```
在该代码中,我们首先定义了两个类Work和Person,其中Person类中包含一个Work类型的属性Info。然后我们创建了一个Person数组,包含两个Person对象,并将该数组序列化到文件中。接着我们从文件中反序列化读取Person数组,并对数据进行校验,输出每个Person对象的属性值。在数据校验过程中,我们可以根据需要进行各种各样的判断和处理。
需要注意的是,在序列化和反序列化过程中,我们使用了BinaryFormatter类。这个类可以将对象序列化为二进制格式,也可以从二进制格式反序列化为对象。同时,我们还需要给每个类都加上[Serializable]特性,以标记该类可以被序列化。
阅读全文