代码之家  ›  专栏  ›  技术社区  ›  adrianm

从XmlSerializer生成的XML中的额外xmln

  •  3
  • adrianm  · 技术社区  · 14 年前

    我已经通过xsd.exe工具从架构生成了一个类。

    现在,当我序列化类时,会得到一个额外的 xmlns="" 根下的一切。

    <myroot xmlns="blabla">
        <tag1 xmlns="">
            <tag2>
                ...
    

    架构如下:

    <xsd:schema xmlns="blabla" targetNamespace="blabla" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="MyRoot">
    

    我在模式中看不到任何指示Tag1元素及其下的元素应该在根之外的另一个命名空间中的内容。

    序列化代码只执行以下操作:

    MyRoot doc = new MyRoot();
    ...
    XmlSerializer xs = new XmlSerializer(typeof(MyRoot));
    MemoryStream ms = new MemoryStream();
    try {
        xs.Serialize(ms, doc);
    

    从xsd.exe生成的类只包含根类上的命名空间属性。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Pieter van Ginkel    14 年前

    它在这里所做的是重写命名空间 "blabla" 从具有特定命名空间的父元素 "" .

    它来这里的原因是 tag1 有一个空的命名空间集(或者它隐式地推断它有一个空的命名空间),并且 myroot 具有命名空间 “布拉布拉” .

    解决办法是确保 TAG1 与具有相同命名空间 “布拉布拉” .

    我知道,这非常令人恼火,因为这意味着您必须一次又一次地提供名称空间,但这就是它的工作原理。