【发布时间】:2016-08-06 05:49:20
【问题描述】:
尝试反序列化 XML 日志文件。并且除了 XML Document(0,0) 中的错误之外似乎什么也得不到。我猜这与我的班级有关,但我似乎找不到解决方案。我无法更改 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 时更改编码似乎没有帮助。
【问题讨论】:
-
1)需要内部异常,2)(题外话)你使用的属性有点太多了。
-
显示堆栈跟踪,尤其是整个异常(内部异常)。
-
由于错误位于 (0,0),即第一行的第一个字符,我猜这是因为您的 XML 文件是使用带有字节顺序标记的 UTF 编码的。尝试将编码添加到您的 StreamReader。
-
如果您对 XML 文件执行
File.ReadAllBytes(),文件中的前 20 个左右字节是多少?