XML 同一对象序列化不同的元素名称

XML Serialization different elementName for same object

我在 ASP.Net Core

中有以下模型
[Serializable]
    [XmlRoot(ElementName = "CREDIT")]
    public class Credit
    {
  [XmlElement(ElementName = "D_numbern")]
        public string Number get; set; }
}

我用StringWriter做了序列化,这样的问题我应该XML

<CREDITS>
    <CREDIT ID="1">
     <D_number1>06</D_number1>
      </CREDIT>

      <CREDIT ID="2">
     <D_number2>06</D_number2>
      </CREDIT>
</CREDITS>

我没有找到如何使每个学分的 n 动态化的解决方案。 在此先感谢您的帮助。

您所追求的不是 XmlSerializer 支持的东西,坦率地说,这通常是 xml 的糟糕设计;它不仅是多余的(xml 是有序的:没有必要告诉它你是项目 1/2/3),而且它对大多数 xml 工具,包括序列化器、模式验证者等

我的强烈建议 是重新考虑您想要的xml,如果不是您的想法,则挑战要求。如果 D_number42 将始终匹配作为父级的 ID="42",坦率地说,后缀毫无用处。如果只是在这些示例中巧合地看起来相同的不同数字,则:<D_number someattribute="42">06</D_number>

但是,如果您必须执行此操作,则必须通过 XDocumentXmlDocumentXmlWriter 手动执行.


例如使用XmlWriter:

    static void WriteCredit(XmlWriter xml, string id, string number)
    {
        xml.WriteStartElement("CREDITS");
        xml.WriteStartElement("CREDIT");
        xml.WriteAttributeString("ID", id);
        xml.WriteElementString("D_number" + id, number);
        xml.WriteEndElement();
        xml.WriteEndElement();
    }

写入控制台的用法:

    using (var xml = XmlWriter.Create(Console.Out))
    {
        WriteCredit(xml, "1", "06");
    }