2012-03-26 92 views
2

我得到了下面的XML(它只是一個大的XML的一部分,我有我的問題),我試圖讓一個Serializable類讀取相同的內容。C#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> 

我的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屬性不會解決這個問題,而是它將是

如果有任何人可以正確我或給我一個更好的解決方案將是偉大的!

回答

5

應該[XmlElement]如果你想每個項目的元素沒有包裝元素:

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

超級謝謝! – 2012-03-26 10:06:50