[英]C# XML Serializable Collection
我得到了下面的 XML(它只是我遇到問題的大 XML 的一部分),我正在嘗試創建一個 Serializable 類來讀取相同的內容。
<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>
注意:從 List 屬性中移除 [XmlArray("STMTTRN")] 標簽不會解決這個問題,而是
如果有人可以糾正我或給我一個更好的解決方案,那就太好了!!
如果您希望每個項目的元素沒有包裝元素,則應為[XmlElement]
:
[XmlElement("STMTTRN")]
public List<StatementTransaction> StatementTransactions { get; set; }
我想補充一點,為了序列化集合,你需要有這樣的東西:
[Serializable]
[XmlRoot("BANKTRANLIST", Namespace = "http://bank.net", IsNullable = false)]
public class BankTransactionList
{
public BankTransactionList()
{
StatementTransactions = new List<StatementTransaction>()
{
new StatementTransaction()
};
}
[XmlElement("DTSTART")]
public string StartDate { get; set; }
[XmlElement("DTEND")]
public string EndDate { get; set; }
[XmlElement("STMTTRN")]
public List<StatementTransaction> StatementTransactions { get; set; }
}
否則,不初始化StatementTransaction對象,列表將不會被序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.