尝试序列化对象而不生成过多的 XML 命名空间声明(例如 xsi 和 xsd)时,就会出现挑战。默认情况下,序列化进程将这些命名空间注入生成的 XML 文档中。
请考虑以下演示问题的代码片段:
StringBuilder builder = new StringBuilder(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings)) { XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); s.Serialize(xmlWriter, objectToSerialize); }
生成的 XML 文档将包含命名空间声明:
<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns="urn:something"> ... </message>
为了消除这些不必要的命名空间声明,必须使用自定义命名空间对象:
... XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("",""); s.Serialize(xmlWriter, objectToSerialize, ns);
通过利用 XmlSerializerNamespaces 类并添加空字符串作为键和值,可以覆盖默认命名空间声明并生成所需的输出:
<message> ... </message>
以上是在 .NET 中序列化 XML 时如何自定义命名空间声明?的详细内容。更多信息请关注PHP中文网其他相关文章!