2012-03-26 91 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