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 序列化相似。