首页 > 解决方案 > 序列化时带有特殊字符的 XML 元素名称

问题描述

在将对象序列化为 XML 时,我使用属性约定,就像[XmlElement("MyData:Pool1")]我一样,它完成了这项工作,但 XML 看起来像

<_x005C_MyData_x003A_Pool1 >

我认为它转换为冒号或任何特殊字符转换为其他格式,我尝试在字符串前面使用反斜杠、@ 和 $ 符号进行更改,但这对我没有帮助。

除了使用字符串/正则表达式替换之外还有什么建议吗?

  private void Serlise(Interface request)
    {
        var xsSubmit = new XmlSerializer(typeof(Interface));
        var ns = new XmlSerializerNamespaces();
        ns.Add("", "");
        var xml = "";

        using (var encoder = new CustomEncoder())
        {
            using (var  writer = XmlWriter.Create(encoder))
            {
                xsSubmit.Serialize(writer, request,ns);
                xml = encoder.ToString();
            }
        }
        File.WriteAllText(@"output.xml", xml);
    }

下面是要序列化的类


[System.SerializableAttribute()]

[System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.foo1.com/bar/test/")] [System.Xml. Serialization.XmlRootAttribute(ElementName = "Pool", Namespace = "http://www.foo1.com/bar/test/", IsNullable = false)] public partial class Root {

private Tester adminField;

private string versionField;

[XmlElement("Test:Pool1")]
public Tester Admin
{
    get
    {
        return this.adminField;
    }
    set
    {
        this.adminField = value;
    }
}

 
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Version
{
    get
    {
        return this.versionField;
    }
    set
    {
        this.versionField = value;
    }
}

}

注意:由于 NDA,XML 上的命名空间和类名略有调整

<?xml version="1.0" encoding="utf-8"?><q1:MydataPool Version="1" xmlns:q1="http://www.foo1.com/bar/test"><q1:Data Id ="000123" Function="Hi"><q1:Hello Test="Abcd"  /></q1:Data></q1:MydataPool>

标签: c#.netxmlelement

解决方案


在属性属性中指定命名空间:

[XmlElement("Pool1", Namespace = "url")]
public Tester Admin

为此命名空间设置前缀:

var ns = new XmlSerializerNamespaces();
ns.Add("MyData", "url");

结果,你会得到

<MyData:Pool1>

推荐阅读