#c# #json
Вопрос:
В каждой строке темы у меня есть большой (более 300 000 записей) JSON, который я хотел бы десериализовать… Я знаком с JSONtoSharp и другими ресурсами, которые помогают создавать классы…
Учитывая этот фрагмент JSON (второй блок кода ниже), JSONtoSharp рекомендует мне использовать следующую структуру (см. Первый блок кода)
Моя проблема в том,что я не знаю, что такое word3 -> word300 000, и я бы не хотел определять класс для каждого из них 🙂
Итак, интересно, есть ли какая-то общая структура, шаблон преобразования, который я могу использовать?
Спасибо за ваше время и помощь.
public class Definition
{
public string definition { get; set; }
public string partOfSpeech { get; set; }
public List<string> synonyms { get; set; }
public List<string> similarTo { get; set; }
public List<string> typeOf { get; set; }
}
public class Word1
{
public List<Definition> definitions { get; set; }
public int letters { get; set; }
}
public class Word2
{
public List<Definition> definitions { get; set; }
public int letters { get; set; }
}
public class Root
{
public Word1 word1 { get; set; }
public Word2 word2 { get; set; }
}
{
"word1": {
"definitions": [
{
"definition": "being ten more than fifty",
"partOfSpeech": "adjective",
"synonyms": [
"lx",
"sixty",
"threescore"
],
"similarTo": [
"cardinal"
]
},
{
"definition": "the cardinal number that is the product of ten and six",
"partOfSpeech": "noun",
"synonyms": [
"lx",
"sixty"
],
"typeOf": [
"large integer"
]
}
],
"letters": 2
},
"word2": {
"definitions": [
{
"definition": "being eight more than seventy",
"partOfSpeech": "adjective",
"synonyms": [
"lxxviii",
"seventy-eight"
],
"similarTo": [
"cardinal"
]
},
{
"definition": "the cardinal number that is the sum of seventy and eight",
"partOfSpeech": "noun",
"synonyms": [
"lxxviii",
"seventy-eight"
],
"typeOf": [
"large integer"
]
},
{
"definition": "a shellac based phonograph record that played at 78 revolutions per minute",
"partOfSpeech": "noun",
"synonyms": [
"seventy-eight"
],
"typeOf": [
"disc",
"disk",
"platter",
"record",
"phonograph record",
"phonograph recording"
]
}
],
"letters": 2
}
}
Комментарии:
1. Вы можете использовать
Dictionary<string, Word>
Ответ №1:
Вам нужна другая структура, чтобы содержать определения:
public class Definitions {
public List<Definition> definitions { get; set;}
}
public class Definition {
public string definition { get; set; }
public string partOfSpeech { get; set; }
public List<string> synonyms { get; set; }
public List<string> similarTo { get; set; }
public List<string> typeOf { get; set; }
}
Затем вы можете десериализовать его следующим образом (если вы используете Json.NET)
var definitions = JsonConvert.DeserializeObject<Dictionary<String, Definitions>>(json);
Результат:
Комментарии:
1. Это было очень полезно, еще раз спасибо за потраченное время. На каком-то уровне я понимал, что мне понадобится словарь <строка, объект> при десериализации, а дополнительный класс списка создает момент для удара по лбу, который имеет все значение! (вот что я получаю за то, что полагаюсь на онлайн-конвертеры). 🙂
2. Немного странно, что самого «слова» нет в ответе Json — мне интересно, как вы собираетесь это вывести?
3. В конечном счете, классы, с которыми я пошел, были:список слов общедоступного класса { общедоступный словарь<строка, слова> Список слов; } Слова общедоступного класса { общедоступный список<строка, слова><Определение> определения { get; set; } общедоступные буквы { get; set; } } Определения общедоступных классов { общедоступный список<Определение><Определение> определения { get; set; } } Тогда было удивительно просто получить определения. ключ как каждое отдельное «слово» из словаря, и некоторые итерации дали мне определения… Еще раз большое спасибо за помощь. Ты спас меня от многих страданий и ускорил мое образование.