我正在使用他们的 API 从 SagePay 下载交易数据。调用的结果为我提供了一个 XML 字符串,然后我将其反序列化并存储在一个类中。
每次调用最多检索 50 条记录,我多次调用给定的 datetime
跨度,直到检索到所有记录。这对于第一个 X 调用工作正常,但随后出现错误:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll
Additional information: There is an error in XML document (1, 141).
Inner Exception: {"Value was either too large or too small for an unsigned byte."}
XML document (1, 141).
中的值每次尝试并不总是保持不变。如果我在这个位置看角色,我看不出有什么不对。
在此示例中,字符 141 是 <totalrows>
中的“t” :
<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><vspaccess><errorcode>0000</errorcode><transactions><startrow>251</startrow><endrow>300</endrow><totalrows>16684</totalrows>
<startrow>
251 表明在这个错误的调用之前有 5 个成功的调用。
反序列化代码:
XmlSerializer serializer = new XmlSerializer(typeof(vspaccess));
StringReader rdr = new StringReader(xmlDoc.InnerXml);
vspaccess sageTransactions = (vspaccess)serializer.Deserialize(rdr);
vspaccess
是VS2013生成的类(选择性粘贴)
我错过了什么?
我显然不能发布所有 XML,因为它是实时交易信息,但如果我遗漏了任何必需的信息,请告诉我
最佳答案
阅读错误。无符号字节的最大大小为 255——因此 300 的值就太大了。
16684 也太大了。不要卡在错误报告的列号上。查看错误消息和您正在加载的内容。
关于c# - 反序列化 XML - 值对于无符号字节来说太大或太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34207545/