XmlSerializer 测试

测试源代码如下,使用 VS2013 编写。

运行结果如下

可以看出,

  1. XmlArrayItem(Attribute)XmlElement 等相关特性中指定 IsNullable = true 可以使得当前为 null / Nothing 的元素在序列化时产生一个包含 xsi:nil="true" 特性的 XML 元素。
  2. 在特性中指定元素的命名空间时,应当指定命名空间的 URI,尽管可以稍后在 XmlSerializerNamespaces 中为这些 URI 指定对应的命名空间前缀。
  3. 需要序列化派生类时,总是 需要通过 XmlInclude 特性,或者通过 XmlSerializer 的构造函数显式声明序列化过程中可能用到的派生类。
  4.  数组的序列化:可以通过 XmlArrayItem 特性声明数组中可能包含的派生类类型。这些类型在序列化时会使用与之对应的元素名。如果存在未在 XmlArrayItem 中声明的派生类,而其基类在 XmlArrayItem 中声明过,则会使用基类对应的元素名,外加 xsi:type 特性声明实际派生类的类型。(关于这一点,可以参阅另一篇文章:MSDN中“(使用 XmlArrayItemAttribute 限定)序列化派生类”一节中的示例可能与实际有出入
  5. 我该滚去修改以前的代码了。

MSDN中“(使用 XmlArrayItemAttribute 限定)序列化派生类”一节中的示例可能与实际有出入

cite=https://msdn.microsoft.com/ZH-CN/library/vstudio/2baksw0z.aspx

XmlArrayItemAttribute 的另一种用法是,允许序列化派生类。 例如,可将派生自 Employee 的另一个名为 Manager 的类添加至上一示例中。 如果没有应用 XmlArrayItemAttribute,代码将在运行时失败,原因是无法识别派生类类型。 若要解决这个问题,每次为每个可接受类型(基类和派生类)设置 Type 属性时,需要应用该特性两次。

序列化实例可能如下所示。

然而实际情况不一样…… 继续阅读“MSDN中“(使用 XmlArrayItemAttribute 限定)序列化派生类”一节中的示例可能与实际有出入”

Content is available under CC BY-SA 3.0 unless otherwise noted.