Xml 序列化
.Net 内置的 XmlSerializer
类可以实现序列化与反序列化,但它不支持匿名类型、动态类型等。使用 Fireasy 的 Xml 序列化,可以获得与 Josn 序列化一样的特性,由于它们都实现 ITextSerializer
接口,使用时能够无缝切换。
XmlSerializer
类有 Serialize 和 Deserialize 两个方法,它的使用与 JsonSerializer 比较相似,建议你先前去阅读,下面只是对一些特殊的地方进行补充。
1、序列化选项
XmlSerializeOption
类提供了很多的选项,用于在序列化和反序列化的控制。大部分属性和 JsonSerializeOption
类相同的,不再赘述。
- CData 属性
指定对于富文本是否需要输出 CData 标识符。默认为 true。
- Declaration 属性
指定是否使用 xml 文档声明。
- NodeStyle 属性
指定属性的输出风格,默认使用节点 Element,也可以改成属性方式 Attribute。如下所示:
[TestMethod]
public void TestSerializeWithAttribute()
{
dynamic obj = new ExpandoObject();
obj.Contact = new { Address = "kunming" };
obj.Name = "aaaa";
obj.IsOld = true;
obj.Age = 12.5;
obj.Items = new[] { 34, 55, 66 };
var option = new XmlSerializeOption { NodeStyle = XmlNodeStyle.Attribute };
var serializer = new XmlSerializer(option);
var xml = serializer.Serialize(obj);
Console.WriteLine(xml);
}
输出的 Xml
文本如下所示:
<?xml version="1.0" encoding="utf-16"?>
<Dynamic Name="aaaa" IsOld="True" Age="12.5">
<Contact Address="kunming" />
<Items>
<int>34</int>
<int>55</int>
<int>66</int>
</Items>
</Dynamic>
2、转换器
转换器的基类是 XmlConverter
类,它用于处理特定类型的序列化和反序列化过程,使用方法与 Json 序列化相似。