Сериализуемая коллекция C # XML - PullRequest
3 голосов
/ 26 марта 2012

Я получил приведенный ниже XML (это просто часть большого XML, в котором у меня возникла проблема), который я пытаюсь сделать сериализуемым классом для чтения того же.

<BANKTRANLIST>
  <DTSTART>20051001</DTSTART>
  <DTEND>20051028</DTEND>
  <STMTTRN> <!-- This element can repeat any number of times -->
    <TRNTYPE>CHECK</TRNTYPE>
    <DTPOSTED>20051004</DTPOSTED>
    <TRNAMT>-200.00</TRNAMT>
  </STMTTRN>
  <STMTTRN>
    <TRNTYPE>ATM</TRNTYPE>
    <DTPOSTED>20051020</DTPOSTED>
    <TRNAMT>-300.00</TRNAMT>
  </STMTTRN>
</BANKTRANLIST>

Внедрение My C #

[Serializable]
[XmlRoot("BANKTRANLIST", Namespace = "http://bank.net", IsNullable = false)]
public class BankTransactionList
{
    public BankTransactionList()
    {
        this.StatementTransactions = new List<StatementTransaction>();
    }

    [XmlElement("DTSTART")]
    public string StartDate { get; set; }

    [XmlElement("DTEND")]
    public string EndDate { get; set; }

    [XmlArray("STMTTRN")]
    [XmlArrayItem("STMTTRN")]
    public List<StatementTransaction> StatementTransactions { get; set; }
}


[Serializable]
[XmlRoot("STMTTRN", Namespace = "http://bank.net", IsNullable = false)]
public class StatementTransaction
{
    // TransactionType : ENUM
    [XmlElement("TRNTYPE")]
    public TransactionType TransactionType { get; set; }

    [XmlElement("DTPOSTED")]
    public string DatePosted { get; set; }

    [XmlElement("TRNAMT")]
    public double TransactionAmount { get; set; }
}

Моя проблема - элемент снова обернут в элемент, в результате чего получается следующий вывод

...
    <STMTTRN> <!-- This does not match my Original XML -->
      <STMTTRN>
        <TRNTYPE>CHECK</TRNTYPE>
        <DTPOSTED>20051004</DTPOSTED>
        <TRNAMT>-200.00</TRNAMT>
      </STMTTRN>
      <STMTTRN>
        <TRNTYPE>ATM</TRNTYPE>
        <DTPOSTED>20051020</DTPOSTED>
        <TRNAMT>-300.00</TRNAMT>
      </STMTTRN>
    </STMTTRN>

Примечание. Удаление [XmlArray("STMTTRN")] тег из свойства List не решит эту проблему, вместо этого будет

Если кто-то может исправить меня или дать мне лучшее решение, было бы здорово !!

1 Ответ

8 голосов
/ 26 марта 2012

Должно быть [XmlElement], если вы хотите элемент для элемента без элемента-оболочки:

[XmlElement("STMTTRN")]
public List<StatementTransaction> StatementTransactions { get; set; }
...