Если коротко, то
- Кодеры/Декодеры - когда есть строго структурированная и типизированная модель. Как только стуктура и типы модели начинают плавать, то, чтобы продолжать использовать декодеры, нужно использовать различные ухищрения типа перечеслений, оборачивающих конкретный типы
- JsonSerialization - тупо перевод из массивов и словарей в json и обратно. Если в исходных объектах будут типы, которые фреймворк не способен будет интерпретировать как примитив, то он выкинет ошибку.
вот тут подробнее) с этими обёртками работать намного сложнее, если меняется структура - надо переписывать