Некоторые особенности десериализации JSON в C#:
- Объект, который подвергается десериализации, должен иметь либо конструктор без параметров, либо конструктор, для всех параметров которого в десериализуемом JSON-объекте есть значения. 1 Соответствие между параметрами конструктора и свойствами JSON-объекта устанавливается на основе названий, причём регистр не играет значения. 1
- По умолчанию все свойства JSON, которые не представлены в классе, игнорируются. 2 Если необходимы какие-либо свойства типа, но не присутствуют в полезных данных JSON, десериализация завершится ошибкой. 2
- По умолчанию при сопоставлении имён свойств учитывается регистр. 2 Можно указать учёт регистра. 2
- Сериализатор не учитывает конструкторы, которые не являются открытыми. 2
- Десериализация для неизменяемых объектов или свойств, не имеющих общедоступных set методов доступа, поддерживается, но не включена по умолчанию. 2
- По умолчанию перечисления поддерживаются в виде чисел. 2 Можно десериализировать поля перечисления строк. 2
- По умолчанию комментарии или завершающие запятые в JSON вызывают исключения. 2 Можно разрешить комментарии и завершающие запятые. 2
- Максимальная глубина по умолчанию равна 64. 2
Для десериализации кода JSON в объект C# применяется метод Deserialize() и его асинхронный двойник DeserializeAsync(). 1