У меня возникли проблемы с поиском, почему следующий 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
. - person Cody Gray   schedule 28.06.2011