Предположение в вашем редакторе верное. Способ десериализации списка заключается в том, что сначала создается объект списка, а затем добавляются отдельные элементы. Если вы думаете о том, как работает JSON, то для парсера и десериализатора имеет смысл работать следующим образом:
Когда парсер встречает [
, он знает, что запускается массив JSON. Поэтому, когда этот объект должен быть десериализован в тип коллекции. NET, он может уже создать эту коллекцию в этот момент. В конце концов, десериализатор знает тип цели, до которого он должен десериализоваться.
Таким образом, десериализатор создает объект списка, а затем начинает десериализацию элементов внутри. В вашем случае это Bar
объекты. Таким образом, он создает их, устанавливает свойства и, как только объект завершается, наконец добавляет их в список.
Вы действительно можете увидеть это в источнике. Существует несколько конвертеров коллекций, в зависимости от того, какой у вас целевой тип, но все они наследуются от IEnumerableDefaultConverter
, который в основном имеет поведение, которое я описал выше . Для List<T>
фактическая работа происходит в ListOfTConverter
, который в основном просто инициализирует новый список и вызывает Add
для каждого элемента.
Если мне нужно было сделать некоторые логики c на основе значений, установленных в свойстве Bars, как я могу сделать sh, что если значение не имеет информации?
Я не думаю, что вы должны. Вы должны рассматривать процесс десериализации как отдельную операцию, а не мешать ей. Я бы посоветовал вам сделать это позже, например, как этап последующей обработки после десериализации.