结构体
和类
都能进行 xml 的序列化和反序列化。
必须包含的命名空间:
1 | using System.IO; |
基本的序列化
这里以结构体
类型为例 :
1 | public struct Student |
这里访问类型必须要public
。
1 | class XmlSerializerHelper |
1 | class Program |
输出,没什么问题:
1 |
|
简单反序列化
1 | class Program |
输出,没什么问题:
1 | Name = 毛泽东 |
测试一下嵌套序列化
1 | public struct Student |
1 | class Program |
输出:1
2
3
4
5
6
7
8
9
<Student>
<Name>毛泽东</Name>
<Age>18</Age>
<OtherInfo>
<Birth>1893</Birth>
<Alisa>毛润之</Alisa>
</OtherInfo>
</Student>
测试下如果引用变量为null的情况
1 | class Program |
输出:
1 | <?xml version="1.0" encoding="utf-8"?> |
可见,null值不进行序列化,int类型会默认为0,所以存在。
把struct
改成class
:
1 | public class Student |
输出:
1 |
|
class
为引用类型,为 null
没输出了。
数组的序列化
输出:
1 | public class Person |
1 | class Program |
1 |
|
可见:
- 数组如果不要再包一层,
[XmlElement("Dog")] // 不要“再包一层”
显示的命名个节点。不然输出如下:
1 |
|
Dog
数组外面包了一层<Dog>
。
private string valuePrivate { get; set; } = "0";
私有成员没有被序列化。