簡體   English   中英

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");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM