Я новичок здесь, поэтому, пожалуйста, извините любые упущения в правильной процедуре вопроса!Deserializing многомерная строка JSON
В принципе, я пытаюсь десериализовать массив json из API Pearson Dictionary Web API. Вот JSON (я удалил некоторые избыточные results
индексы для экономии места):
{
"status": 200,
"offset": 0,
"limit": 10,
"count": 10,
"total": 47,
"url": "/v2/dictionaries/ldoce5/entries?headword=test",
"results": [
{
"datasets": [
"ldoce5",
"dictionary"
],
"headword": "test",
"homnum": 1,
"id": "cqAFzDfHTM",
"part_of_speech": "noun",
"pronunciations": [
{
"audio": [
{
"lang": "British English",
"type": "pronunciation",
"url": "/v2/dictionaries/assets/ldoce/gb_pron/brelasdetest.mp3"
},
{
"lang": "American English",
"type": "pronunciation",
"url": "/v2/dictionaries/assets/ldoce/us_pron/test1.mp3"
}
],
"ipa": "test"
}
],
"senses": [
{
"definition": [
"a set of questions, exercises, or practical activities to measure someone's skill, ability, or knowledge"
],
"examples": [
{
"audio": [
{
"type": "example",
"url": "/v2/dictionaries/assets/ldoce/exa_pron/p008-001626298.mp3"
}
],
"text": "Did you get a good mark in the test ?"
}
],
"gramatical_examples": [
{
"examples": [
{
"audio": [
{
"type": "example",
"url": "/v2/dictionaries/assets/ldoce/exa_pron/p008-000592041.mp3"
}
],
"text": "We have a test on irregular verbs tomorrow."
}
],
"pattern": "test on"
}
],
"signpost": "exam"
}
],
"url": "/v2/dictionaries/entries/cqAFzDfHTM"
}
]
}
А вот это C# код, я использую десериализации выше:
class Program
{
static void Main(string[] args)
{
string word = "test";
string sURL = "https://api.pearson.com:443/v2/dictionaries/ldoce5/entries?headword=" + word;
WebClient client = new WebClient();
string full = client.DownloadString(sURL);
var final = JsonConvert.DeserializeObject<Dictionary>(full);
Console.WriteLine(final.results[0].senses.definition);
}
}
public class Dictionary
{
public Result[] results { get; set; }
}
public class Result
{
public string part_of_speech { get; set; }
public Senses senses { get; set; }
}
public class Senses
{
public string definition { get; set; }
}
По какой-то причине, я м получает эту странную ошибку, когда я пытаюсь запустить его:
не может десериализации текущего массива JSON (например, [1,2,3]) в типа «TestingJson.Senses», так как тип требует объекта JSON (например {"name": "value"}) для десериализации. Чтобы исправить эту ошибку, сменил JSON на объект JSON (например, {"name": "value"}) или изменил десериализованный тип на массив или тип, реализующий интерфейс (например, ICollection, IList), например Список, который может быть , десериализован из массива JSON. JsonArrayAttribute также может быть добавлен в тип , чтобы заставить его десериализоваться из массива JSON. Путь 'Результаты [0] .senses', line 1, position 512.
Помощь была бы принята с благодарностью!
Не заставляйте его использовать словарь, пусть он создает свой собственный объект. – Blindy
«Словарь» - это класс, который я создал, а не .NET. Словарь – Destroyer97
«Чувства» - это особый тип. узел JSON 'senses' является множественным (массив) .. вы не можете вставлять объект в форме множественной формы в отверстие в форме единственной формы. –