首页 >后端开发 >C++ >在 .NET 中序列化 XML 时如何自定义命名空间声明?

在 .NET 中序列化 XML 时如何自定义命名空间声明?

DDD
DDD原创
2025-01-01 12:08:12482浏览

How to Customize Namespace Declarations When Serializing XML in .NET?

在 .NET 中自定义序列化 XML 的命名空间声明

尝试序列化对象而不生成过多的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn