Проблема десериализации ответа от USPS CityStateLookup с Newtonsoft.Json.JsonConvert.DeserializeObject - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь проанализировать ответ от USPS CityStateLookup API, и, похоже, я не смоделирую его должным образом, так как я получаю "{" неожиданный символ, обнаруженный при анализе значения: <. Path '', строка 0, позиция 0. "}" во время синтаксического анализа "ошибка прямо в начале вызова DeserializeObject </p>

Мой код:

Class CityStateLookupResponse
    Property ZipCodeList As List(Of ZipCode)
End Class

 Class ZipCode
    Property Zip5 As String
    Property City As String
    Property State As String
 End Class


Private Async Function GetCityStateFromZipAsync(byval Zip5Code as string) as threading.tasks.task(of CityStateLookupResult)

 Dim result As New CityStateLookupResponse

 Dim client As New HttpClient() With {
        .BaseAddress = New Uri("http://production.shippingapis.com/ShippingAPI.dll")
    }

    Dim arguments As String = "?API=CityStateLookup&XML=<CityStateLookupRequest USERID=""{0}""><ZipCode ID= ""{1}""><Zip5>{2}</Zip5></ZipCode></CityStateLookupRequest>"
    arguments = String.Format(arguments, "<My User ID>", 0, Zip5Code)

    response = Await client.GetAsync(arguments)

    If Not response.IsSuccessStatusCode Then
        Return result
    End If

    myContent = Await response.Content.ReadAsStringAsync

    ' vvvv  THIS IS THE ERROR LINE  vvvv
    result = Newtonsoft.Json.JsonConvert.DeserializeObject(Of CityStateLookupResponse)(myContent) 
end function

Возвращенный XML для того же вызова API в браузере:

<CityStateLookupResponse>
    <ZipCode ID="0">
        <Zip5>55016</Zip5>
        <City>COTTAGE GROVE</City>
        <State>MN</State>
     </ZipCode>
 </CityStateLookupResponse>

Что я делаю неправильно в определении класса для CityStateLookupResponse? (Или есть лучший способ сделать это вообще?)

1 Ответ

0 голосов
/ 26 января 2019

Давно не смотрел на VB, но, похоже, вы используете неправильный метод десериализации XML.Используемый вами метод предназначен для JSON.

Для десериализации XML используйте DeserializeXmlNode .

...