[英]C# XML Serializable Collection
I got the below XML (It is just a part of a big XML where I have my problem) that I am trying to make a Serializable class to read the same.我得到了下面的 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>
My C# Implementation我的 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; }
}
My problem is element wrapped again in element which results to get the below output我的问题是元素再次包裹在元素中,结果得到以下输出
...
<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>
Note: Removing [XmlArray("STMTTRN")] tag from List property will not resolve this, instead it will be注意:从 List 属性中移除 [XmlArray("STMTTRN")] 标签不会解决这个问题,而是
If any one can correct me or give me a better solution would be great !!如果有人可以纠正我或给我一个更好的解决方案,那就太好了!!
Should be [XmlElement]
if you want an element per item without a wrapper element:如果您希望每个项目的元素没有包装元素,则应为[XmlElement]
:
[XmlElement("STMTTRN")]
public List<StatementTransaction> StatementTransactions { get; set; }
I would add that in order to serialize the collection you will need to have it something like this:我想补充一点,为了序列化集合,你需要有这样的东西:
[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; }
}
Otherwise, without initializing the StatementTransaction object, the list will not be serialized.否则,不初始化StatementTransaction对象,列表将不会被序列化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.