XML Сериализация различных elementName для одного и того же объекта - PullRequest
1 голос
/ 27 февраля 2020

У меня есть следующая модель в 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 Dynami c для каждого кредита. заранее спасибо за любую помощь.

1 Ответ

3 голосов
/ 27 февраля 2020

То, что вы ищете, не то, что XmlSerializer поддерживает, и, честно говоря, это плохой дизайн для xml в целом; он не только является избыточным (заказывается xml: нет необходимости сообщать ему, что вы являетесь элементом 1/2/3), но он активно враждебен большинству инструментов xml, включая сериализаторы, средства проверки схемы и т. д. c.

Мое убедительное предложение - переосмыслить xml, который вы хотите, или бросить вызов требованиям, если это не ваша идея. Если D_number42 всегда будет соответствовать ID="42", который является родителем, то, откровенно говоря, суффикс не имеет абсолютно никакой цели. Если это другое число, которое по совпадению выглядит одинаково только в этих примерах, то: <D_number someattribute="42">06</D_number>

Но если вы должны сделать это, вам придется сделать это вручную, через XDocument, XmlDocument или XmlWriter.


в качестве примера, используя 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");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...