public class People { [XmlAttribute("NAME")] public string Name { set; get; } [XmlAttribute("AGE")] public int Age { set; get; } } [XmlRoot("Root")] public class Student : People { [XmlElement("CLASS")] public string Class { set; get; } [XmlElement("NUMBER")] public int Number { set; get; } } void Main(string[] args) { Student stu = new Student() { Age = 10, Class = "Class One", Name = "Tom", Number = 1 }; XmlSerializer ser = new XmlSerializer(typeof(Student)); ser.Serialize(File.Create("C:\\x.xml"), stu); }
反序列化对象
XmlSerializer ser = new
XmlSerializer(typeof(Student));
Student stu = ser.Deserialize(File.OpenRead("C:\\x.xml")) as Student;
对象数组序列化
public class People
{
[XmlAttribute("NAME")]
public
string Name
{ set; get;
}
[XmlAttribute("AGE")]
public int
Age
{ set; get;
}
}
[XmlRoot("Root")]
public class Student :
People
{
[XmlElement("CLASS")]
public
string Class
{ set; get;
}
[XmlElement("NUMBER")]
public int
Number
{ set; get;
}
}
void Main(string[] args)
{
List<Student> stuList = new
List<Student>();
stuList.Add(new Student() { Age = 10, Number = 1, Name = "Tom", Class = "Class
One" });
stuList.Add(new Student() { Age = 11, Number = 2, Name = "Jay", Class = "Class
Two" });
stuList.Add(new Student() { Age = 12, Number = 3, Name = "Pet", Class = "Class
One" });
stuList.Add(new Student() { Age = 13, Number = 4, Name = "May", Class = "Class
Three" });
stuList.Add(new Student() { Age = 14, Number = 5, Name = "Soy", Class = "Class
Two" });
XmlSerializer ser = new
XmlSerializer(typeof(List<Student>));
ser.Serialize(File.Create("C:\\x.xml"), stuList);
}
对象数组反序列
XmlSerializer ser = new
XmlSerializer(typeof(List<Student>));
List<Student> stuList = ser.Deserialize(File.OpenRead("C:\\x.xml")) as
List<Student>;
foreach (Student s in
stuList)
{
MessageBox.Show(string.Format("{0} : {1} : {2} :
{3}",
s.Name, s.Age, s.Class,
s.Number));
}
序列化Dirctionary
public struct DirectionList
{
[XmlAttribute("Name")]
public
string Name;
[XmlElement("Value")]
public int
Value;
}
void Main(string[] args)
{
Dictionary<string, int> list = new Dictionary<string,
int>();
list.Add("1",
100);
list.Add("2",
200);
list.Add("3",
300);
list.Add("4",
400);
list.Add("5",
500);
list.Add("6",
600);
list.Add("7",
700);
list.Add("8",
800);
list.Add("9", 900);
List<DirectionList> dirList = new
List<DirectionList>();
foreach (var s in
list)
{
dirList.Add(new DirectionList() { Name = s.Key, Value = s.Value
});
}
XmlSerializer ser = new
XmlSerializer(typeof(List<DirectionList>));
ser.Serialize(File.Create("C:\\x.xml"), dirList);
}
这里还要讲一点,在XmlSerializer中,不支持Dirctionary<>类型的对象,所以在序列化这种最常见类型的时候,只能按照它的格式先创建一个可以别序列化的类型,这里我定义了一个结构体,当然你也可以定义成其他的类。将Dictionary<>中的数据依次放进结构体以后就可以放入流中了。
[XmlAttribute("Name")]意思是将这个字段作为xml的属性,属性名跟在“”中
[XmlElement("Value")]意思是将这个字段做为xml的元素。
反序列化Dirctionary
XmlSerializer ser = new
XmlSerializer(typeof(List<DirectionList>));
List<DirectionList> dirList =
ser.Deserialize(
File.OpenRead("C:\\x.xml")) as
List<DirectionList>;
foreach (var v in
dirList)
{
Console.WriteLine("{0} : {1}", v.Name,
v.Value);
}
其实我并不喜欢这个名称,感觉有点生化危机的feel,但是也就是这样了,没有太炫的地方,Deserialize反序列化。真希望.Net能集成Dirctionary<>对象,那我们这些懒人就方便了。
在需要序列化的队伍中,数组是很常见的类型,其次就是图片了
序列化图片
public struct ImageStruct
{
[XmlAttribute("Number")]
public
int number;
[XmlElement("Image")]
public
byte[] picture;
}
void Main(string[] args)
{
ImageStruct s = new ImageStruct() { number = 1, picture =
File.ReadAllBytes(@"11.jpg")
};
XmlSerializer ser = new
XmlSerializer(typeof(ImageStruct));
FileStream fs =
File.Create("c:\\x.xml");
ser.Serialize(fs,
s);
fs.Close();
}
一样的,采用结构体来保存图片,这里我还加了个图片的名字,到时候查找起来也方便一些
图片反序列化
XmlSerializer ser = new
XmlSerializer(typeof(ImageStruct));
ImageStruct s =
(ImageStruct)ser.Deserialize(File.OpenRead("c:\\x.xml"));
pictureBox1.Image = Image.FromStream(new MemoryStream(s.picture));
没有花头的方式,利用memorystream来做缓存,这样会比较快一点,实际上我并没有怎么感觉。
图片数组序列化
public struct ImageStruct
{
[XmlAttribute("Number")]
public
int number;
[XmlElement("Image")]
public
byte[] picture;
}
void Main(string[] args)
{
List<ImageStruct> imageList = new
List<ImageStruct>();
imageList.Add(new
ImageStruct()
{
number =
1,
picture =
File.ReadAllBytes(@"11.jpg")
});
imageList.Add(new
ImageStruct()
{
number =
2,
picture =
File.ReadAllBytes(@"22.jpg")
});
XmlSerializer ser = new
XmlSerializer(typeof(List<ImageStruct>));
FileStream fs =
File.Create("c:\\x.xml");
ser.Serialize(fs,
imageList);
fs.Close();
}
图片数组反序列化
XmlSerializer ser = new
XmlSerializer(typeof(List<ImageStruct>));
List<ImageStruct> s =
(List<ImageStruct>)ser.Deserialize(File.OpenRead("c:\\x.xml"));
var im = from i in
s
where i.number ==
1
select i.picture;
//var im =
s.Where(p => p.number == 1).Select(p =>
p.picture);
foreach (var image in
im)
{
pictureBox1.Image =
Image.FromStream(
new
MemoryStream(image));
}
这里还对数组结构进行了Linq查询,这样就可以很方便的查询图片了。