[英]Deserialization of XML
嘗試反序列化XML日志文件。 而且,除了XML Document(0,0)中的Error之外,似乎什么也沒得到。 我猜想這與我的課堂有關,但我似乎找不到解決方案。 我無法更改XML格式,因為這是來自服務器的日志文件(只是簡化了)
XML格式
<?xml version="1.0" encoding="utf-8"?>
<POSLog>
<Transaction>
<RetailStoreID>1</RetailStoreID>
<SequenceNumber>2</SequenceNumber>
</Transaction>
<Transaction>
<RetailStoreID>1</RetailStoreID>
<SequenceNumber>3</SequenceNumber>
</Transaction>
</POSLog>
類
[Serializable()]
public class Transaction
{
[XmlElement("RetailStoreID")]
public string RetailStoreID { get; set; }
[XmlElement("SequenceNumber")]
public string SequenceNumber { get; set; }
}
[Serializable()]
[XmlRoot("POSLog")]
public class POSLog
{
[XmlArray("POSLog")]
[XmlArrayItem("Transaction", typeof(Transaction))]
public Transaction[] Transaction { get; set; }
}
反序列化代碼
POSLog poslog = new POSLog();
string path = "POSLog.xml";
XmlSerializer serializer = new XmlSerializer(typeof(POSLog));
StreamReader reader = new StreamReader(path);
poslog = (POSLog)serializer.Deserialize(reader);
通過從StreamReader切換到FileStream以及對類的更改找到了解決方法。 使用StreamReader時,更改編碼似乎沒有幫助。
我無法重現您看到的問題。 但是, POSLog
類存在問題-需要定義如下:
[Serializable()]
[XmlRoot("POSLog")]
public class POSLog
{
[XmlElement("Transaction")]
public Transaction[] Transaction { get; set; }
}
您的XML具有根元素<POSLog>
其中包含重復序列的<Transaction>
元素。 [XmlElement("Transaction")]
將數組映射到這樣的一級重復序列。
小提琴的例子。
將班級更改為上述答案
[Serializable()]
[XmlRoot("POSLog")]
public class POSLog
{
[XmlElement("Transaction")]
public Transaction[] Transaction { get; set; }
}
以及更改以下StreamReader行
StreamReader reader = new StreamReader(path);
poslog = (POSLog)serializer.Deserialize(reader);
對此:
FileStream fs = new FileStream(path, FileMode.Open);
poslog = (POSLog)serializer.Deserialize(fs);
修復了root元素遇到的問題,並且我能夠反序列化XML。 感謝dbc的幫助,讓我第一次在論壇上開始解決解決方案!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.