【发布时间】:2011-06-28 09:57:26
【问题描述】:
我无法找到以下 XML 无法反序列化的原因。
留言:
XML 文档中存在错误 (23, 26)。
内部异常:
输入字符串的格式不正确。
调用代码(除了下面的 XML 之外的所有内容都可以正常工作):
Public Shared Function DeserializeObject(Of T)(ByVal serializedXml As String) As T
Dim serializer As New XmlSerializer(GetType(T))
Using strReader As New IO.StringReader(serializedXml)
Return DirectCast(serializer.Deserialize(strReader), T)
End Using
End Function
XML(看起来不错 - 问题出现在 DiscountCode 的第一个方括号之后):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MyResponse>
<Shoppinglist>
<ShoppinglistName>ShoppingListName</ShoppinglistName>
<Currency>GBP</Currency>
<PriceType>Retail</PriceType>
<Orders>
<Order>
<OrderLineId>Test</OrderLineId>
<Completed>false</Completed>
<Description>Other Item</Description>
<Quantity>1</Quantity>
<Parts>
<Part>
<PartId>43543543435</PartId>
<Description>Cylinder Assy - Master</Description>
<PriceInclTax>92.16</PriceInclTax>
<PriceExclTax>76.8</PriceExclTax>
<Quantity>1</Quantity>
<TaxRate>20.0</TaxRate>
<NetDiscountCode>ZZ</NetDiscountCode>
<SurchargeQuantity>1.0</SurchargeQuantity>
-------------> <DiscountRate>0.0</DiscountRate>
</Part>
</Parts>
</Order>
</Orders>
</Shoppinglist>
<ReturnCode>1</ReturnCode>
<StatusMessage>Open tasks exist</StatusMessage>
</MyResponse>
谁能看出哪里出了问题?
堆栈跟踪(外部异常):
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
内部异常的堆栈跟踪:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Xml.XmlConvert.ToInt32(String s)
这很奇怪,因为它看起来正在解析为 Int,而它应该解析为十进制......
T 类的属性:
Protected _DiscountRate As Decimal
Public Property DiscountRate() As Decimal
Get
Return _DiscountRate
End Get
Set(ByVal Value As Decimal)
_DiscountRate = Value
End Set
End Property
我添加了以下内容,但没有任何区别:
<System.Xml.Serialization.XmlElement(Type:=GetType(Decimal))> _
我怀疑这与奇怪的字符有关,因为我看不到任何字符。将类型更改为 Double 也无法解决此问题。还有其他想法吗?
【问题讨论】:
-
我的猜测是
T中接收DiscountRate的字段是整数类型,而不是浮点类型。如果不能看到T类的代码,就无法确定。 -
DiscountRate 是 Decimal 类型,所以应该没问题。它只是上面失败了,其他 XML 似乎很好。我不知道为什么它会为此解析为 int。
-
XML 是否来自网络连接?
-
它来自 REST 服务,所以是的。响应通常会毫无问题地发送 - 只有这个我有问题。
-
既然 XML 很好,接下来想到的就是您从 REST 服务获得的响应不完整。仔细检查一下,也许响应没有一次性完成。
标签: .net vb.net exception-handling xml-serialization deserialization