不为嵌套元素生成xmlns属性

时间:2018-01-26 16:51:45

标签: c# xml-serialization xml-namespaces xmlserializer

我有一个包含另一个类的嵌套列表的类,如下所示:

sub("?(.*\\s)?(\\d.*?\\s).*","\\2",a)
[1] "11-010 " "21 " "03-11-11

regmatches(a,regexpr("\\d.*?\\s",a))
[1] "11-010 "   "21 "       "03-11-11 "

当我尝试序列化public class Departement { [XmlElement (Namespace = "http://tempuri.org/")] string Id; [XmlElement (Namespace = "http://tempuri.org/")] List<Student> listStident = new List<Student> (); } public class Student { [XmlElement (Namespace = "http://tempuri.org/")] string firstName; [XmlElement (Namespace = "http://tempuri.org/")] string lastName; } 的数组时,我得到一个像这样的xml:

Departement

没有为嵌套元素生成名称空间属性。我用来序列化的代码是:

<ArrayOfDepartement xmlns="http://www.w3...">
    <Departement>
        <id xmlns== "http://tempuri.org/">1234567890</id>
        <Student xmlns== "http://tempuri.org/">
            <firstName>med</firstName>
            <lastName>ali</lastName>
        </Student>
        <Student xmlns== "http://tempuri.org/">
            <firstName>joe</firstName>
            <lastName>doe</lastName>
        </Student>
    </Departement>
</ArrayOfDepartement>

1 个答案:

答案 0 :(得分:3)

XML命名空间规范in section 6.1声明:

  

声明前缀的名称空间声明的范围从它出现的start-tag的开头延伸到相应的end-tag的末尾,不包括具有相同NSAttName部分的任何内部声明的范围。对于空标记,范围是标记本身。

     

此类名称空间声明适用于其范围内与声明中指定的前缀匹配的所有元素和属性名称。

因此,数据结构在嵌套的xmlns="http://tempuri.org/"firstName元素上没有重复的lastName属性序列化,因为它们将是多余的。 id和每个Student元素具有自己的xmlns属性的原因是它们是兄弟,形成不相交的命名空间声明范围。

换句话说,您的代码生成的XML是正确的并且符合预期。如果嵌套元素上有额外的xmlns属性,则它没有语义效果。我会更关心的是,您没有序列化特定的根类,而是简单Departement[](除非它仅用于调试/实验目的)。