Определение соответствующих структур классов при десериализации JSON c#

#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; } } Тогда было удивительно просто получить определения. ключ как каждое отдельное «слово» из словаря, и некоторые итерации дали мне определения… Еще раз большое спасибо за помощь. Ты спас меня от многих страданий и ускорил мое образование.