同一对象的XML序列化不同的elementName

问题描述 投票:1回答:1

我在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>

我没有找到一种解决方案,如何使每笔信用动态化。预先感谢您的协助。

c# xml asp.net-core xml-serialization
1个回答
1
投票
您追求的不是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"); }

© www.soinside.com 2019 - 2024. All rights reserved.