【发布时间】:2025-11-24 19:35:02
【问题描述】:
我尝试用自定义命名空间序列化一个对象。类是这样的:
[XmlRoot("Root", Namespace = "myNamespace")]
public partial class MyClass
{
public MyClass()
{
this.Xmlns = new XmlSerializerNamespaces();
this.Xmlns.Add(string.Empty, "myNamespace");
}
[XmlNamespaceDeclarations()]
public XmlSerializerNamespaces Xmlns = null;
}
这是序列化它的代码:
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
serializer.Serialize(xmlWriter, obj);
预期的结果是
<Root xmlns="myNamespace" />
但是它仍然有 xmlns:xsi 和 xmlns:xsd 属性:
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="myNamespace" />
当我使用serializer.Serialize(xmlWriter, obj, obj.Xmlns) 进行序列化时,结果是正确的。
为什么序列化程序会忽略 XmlNamespaceDeclarations 属性?它不应该自动从中获取名称空间声明吗?如何在序列化类中定义命名空间?
提前致谢!
【问题讨论】:
标签: c# xml serialization xml-namespaces