Если play JSON имеет автоматический / полуавтоматический c код c производных экземпляров, то он будет использовать неявный для включения такого механизма. Это означает, что кодеки для сложных вещей должны быть введены после их компонентов.
В вашем случае, похоже, что play JSON пытается получить код c для List как для класса case, т.е. как для List(a1, List(a2, ..., List(an, Nil)))
, и когда он достигает Nil, он не знает, как выведите код c для этого.
Я полагаю, вы хотите, чтобы ваш список был закодирован не как цепочка свернутых объектов, а как массив JSON.
Тогда вам следует поискать источники воспроизведения по умолчанию List[T]
код c и попробуйте использовать его, специализируя его для Id
.
Общим инструментом для отладки отсутствующих имплицитов является опция компилятора "-Xlog-implicits". Он будет регистрировать все неудачные неявные поиски на консоли, и можно выяснить, чего не хватает в этих сообщениях.
Также настоятельно рекомендуется знать , как неявно работает, прежде чем работать с библиотеками, которые широко используют этот feautre.
И последнее, но не менее важное:
Вы когда-нибудь пробовали использовать circe ? Он имеет автоматов c и полуавтоматических c JSON дериваций для семейств запечатанных признаков и стандартных scala классов. Он даже имеет интеграцию с игровой платформой. Деривация Circe устраняет большую часть головной боли при написании кода c, но для правильной работы требуется глубокое знание неявного приоритета Как это работает, описано здесь и здесь .
Вы также можете попытаться создать свой собственный вывод для игры - json, если нет подходящего стандартного варианта с Morphling .