我想使用的api需要我对嵌套元素设置xmlns-属性,如下所示:

<root>
   <mainelement>
   </mainelement>
   <mainelement>
      <subelement xmlns="http://example.com/xml" otherAttr="value">
      </subelement>
   </mainelement>
</root>

subelement的类定义如下:
public class subelement
{
    [XmlAttribute]
    public string otherAttr { get; set; }
    [XmlAttribute]
    public string xmlns { get; set; } = "http://example.com/xml";
}

但是,当我尝试使用xmlserializer序列化根对象时,总是缺少xmlns-属性。否则就没问题了。当我重命名它创建的这个属性时,我想它与保留关键字xmlns有关。
另外,我不能使用标准方法将名称空间设置为Serialize方法的第三个参数,因为我只希望该属性位于subelement对象上。
有没有一种方法可以在序列化后不手动编辑文件来完成这项工作?

最佳答案

您需要在subelement中的mainelement属性上指定正确的名称空间。

public class mainelement
{
    [XmlElement(Namespace = "http://example.com/xml")]
    public subelement subelement { get; set; }
}

public class subelement
{
    [XmlAttribute]
    public string otherAttr { get; set; }
}

参见this fiddle了解工作演示。

10-08 02:41