我正在尝试使用 XmlSerializer 反序列化 .NET 的 XML 文档注释的输出。作为参考,xml 文档的输出如下所示:
<?xml version="1.0"?>
<doc>
<assembly>
<name>Apt.Lib.Data.Product</name>
</assembly>
<members>
<member name="P:MyNamespace.MyType.MyProperty">
<summary>See <see cref="T:MyNamespace.MyOthertype"/> for more info</summary>
</member>
...
</members>
</doc>
我用来生成序列化程序的对象是:
[XmlRoot("doc")]
public class XmlDocumentation
{
public static readonly XmlSerializer Serializer = new XmlSerializer(typeof(XmlDocumentation));
[XmlElement("assembly")]
public AssemblyName Assembly { get; set; }
[XmlArray("members")]
[XmlArrayItem("member")]
public List<Member> Members { get; set; }
public class AssemblyName
{
[XmlElement("name")]
public string Name { get; set; }
}
public class Member
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlElement("summary")]
public string Summary { get; set; }
}
}
问题是当序列化程序遇到嵌入的 see cref 标记时。在这种情况下,序列化程序会抛出以下异常:
System.InvalidOperationException : XML 文档 (147, 27) 中存在错误。----> System.Xml.XmlException:意外的节点类型元素。ReadElementString 方法只能在内容简单或为空的元素上调用。第 147 行,第 27 位。
如何在反序列化期间将摘要标记的全部内容捕获为字符串?