Я создаю программу в Visual Studio 2017 в Windows Forms - извините, но это единственное, что я знаю, как использовать - в любом случае, большинство всего для этого - C #, поэтому у меня возникли проблемы с получением помощи.
Я перевел предоставленный Microsoft пример программы на C # для подключения к службам когнитивного перевода Azure, зарегистрировался, получил все свои ключи и т. Д.
Когда я запускаю код, я получаю следующую ошибку:
Newtonsoft.Json.JsonSerializationException:
«Не может десериализовать
текущий объект JSON (например, {"name": "value"}) в тип
System.Collections.Generic.List 1[System.Collections.Generic.Dictionary
2 [System.String, System.Collections.Generic.List 1[System.Collections.Generic.Dictionary
2 [System.String, System.String]]]]
потому что для десериализации типа требуется массив JSON (например, [1,2,3])
правильно.
Чтобы исправить эту ошибку, либо измените JSON на массив JSON
(например, [1,2,3]) или измените десериализованный тип так, чтобы он был нормальным
Тип .NET (например, не примитивный тип, такой как целое число, а не коллекция
типа как массив или список), который может быть десериализован из JSON
объект. JsonObjectAttribute также может быть добавлен к типу, чтобы заставить его
десериализовать из объекта JSON. Путь «ошибка», строка 1, позиция 9. '
Я перепробовал слишком много вещей, чтобы перечислять их из разных источников. Я не очень много знаю о JSON и прошу помощи с кодом для решения вышеуказанной проблемы.
Public Class DetectedLanguage
Public Property language As String
Public Property score As Double
End Class
Public Class Translation
Public Property text As String
Public Property two As String
End Class
Public Class Example
Public Property detectedLanguage As DetectedLanguage
Public Property translations As Translation()
End Class
Dim textToTranslate As String = root
Dim fromLanguage As String
Dim fromLanguageCode As String = cabbr
Dim toLanguageCode As String = "en"
Dim endpoint As String = String.Format(TEXT_TRANSLATION_API_ENDPOINT, "translate")
Dim uri As String = String.Format(endpoint & "&from={0}&to={1}", fromLanguageCode, toLanguageCode)
Dim body As System.Object() = New System.Object() {New With {Key .Text = textToTranslate}}
Dim requestBody = JsonConvert.SerializeObject(body)
Using client = New HttpClient()
Using request = New HttpRequestMessage()
request.Method = HttpMethod.Post
request.RequestUri = New Uri(uri)
request.Content = New StringContent(requestBody, Encoding.UTF8, "application/json")
request.Headers.Add("Ocp-Apim-Subscription-Key", COGNITIVE_SERVICES_KEY)
request.Headers.Add("Ocp-Apim-Subscription-Region", "westus")
request.Headers.Add("X-ClientTraceId", Guid.NewGuid().ToString())
Dim response = client.SendAsync(request).Result
Dim responseBody = response.Content.ReadAsStringAsync().Result
Dim result = JsonConvert.DeserializeObject(Of List(Of Dictionary(Of String, List(Of Dictionary(Of String, String)))))(responseBody)
Dim translation = result(0)("translations")(0)("text")
rtRoot.Text = translation
End Using
End Using
Я уже использовал сайт jsonutil
, чтобы вставить свой код JSON и получить классы.
Вот мой контент в формате JSON:
[
{
"detectedLanguage":{
"language":"nl",
"score":1.0
},
"translations":[
{
"text":"bord vervangen en uitvoerig getest",
"to":"nl"
},
{
"text":"Board replaced and tested extensively",
"to":"en"
}
]
}
]