代码之家  ›  专栏  ›  技术社区  ›  Piotr Owsiak

在.NET中的反序列化过程中,如何指定XML序列化属性以支持命名空间前缀?

  •  26
  • Piotr Owsiak  · 技术社区  · 15 年前

    我有以下XML:

    <person xmlns:a="http://example.com" xmlns:b="http://sample.net">
        <a:fName>John</a:fName>
        <a:lName>Wayne</a:lName>
        <b:age>37</b:age>
    </person>
    

    如何在类上定义XML序列化属性以支持所描述的场景?

    1 回复  |  直到 12 年前
        1
  •  56
  •   Zach Bonham    15 年前

    您需要使用的命名空间来指示每个字段需要哪些命名空间 XmlElement 属性。这将允许您将字段与特定的命名空间相关联,但您还需要公开类上返回类型的属性 XmlNamespaceDeclarations 以获取前缀关联。

    见以下文件和样本:

     [XmlRoot(ElementName="person")]
        public class Person
        {
    
            [XmlElement(Namespace="http://example.com")]
            public string fname;
    
            [XmlElement(Namespace="http://sample.com")]
            public string lname;
    
            [XmlNamespaceDeclarations]
            public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();
    
            public Person()
            {
                xmlns.Add("a", "http://example.com");
                xmlns.Add("b", "http://sample.com");
            }
        }