Visual Studio 在XML序列化期间,在C#中将命名空间加入至父节点和子节点

qv7cva1a  于 2022-11-17  发布在  C#
关注(0)|答案(1)|浏览(146)

我正在序列化来自C#类的XML,并且需要在根元素和子元素中包含名称空间。
当我从XmlSerializerNamespaces添加命名空间时,它会将所有命名空间添加到根元素。
我需要将一些名称空间添加到根目录,并将一些名称空间添加到Grouping1元素。
谢谢

<root>
  <Element>
    <Grouping1>
      <Item1>First1</Item1>
      <Item2>Second1</Item2>
    </Grouping1>
    <Grouping2>
      <Item3>Third1</Item3>
    </Grouping2>
  </Element>
  <Element>
    <Grouping1>
      <Item1>First2</Item1>
      <Item2>Second2</Item2>
    </Grouping1>
    <Grouping2>
      <Item3>Third2</Item3>
    </Grouping2>
  </Element>
</root>
vpfxa7rd

vpfxa7rd1#

命名空间可以使用子类别中的XmlNamespaceDeclarations加入至任何XML项目。

[XmlNamespaceDeclarations]
 public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces(new[]{new XmlQualifiedName("sig", "urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2")});

示例代码

[Serializable]
[XmlRoot(ElementName = "root")]
public class RootClass
{
    [XmlElement(ElementName = "body", Namespace = "httpenv")]
    public BodyClass body = new BodyClass();
}

[Serializable]
public class BodyClass
{
    [XmlElement(ElementName = "element", Namespace = "httpsos")]
    public SOSClass element = new SOSClass();
}

[Serializable]
public class SOSClass
{
    // This will be used by XML serializer to determine the namespaces
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces( new[] { new XmlQualifiedName("sos", "httpsos"), });
}

相关问题