Проблема связана не с классами дел или вложением, а с типами коллекций Scala, которые не поддерживаются в Gson должным образом.
Чтобы доказать это, давайте изменим PersonCandy
на
case class PersonCandy(name:String, age:Int, candyList: java.util.List[Candy])
И преобразовать candies
в список Java:
import scala.collection.JavaConverters._
val candies = List(/* same items */).asJava
И JSON в порядке:
{"name":"Mark","age":19,"candyList":[{"name":"M\u0026M\u0027s","price":1.99},{"name":"Snickers","price":1.59},{"name":"Butterfinger","price":2.33}]}
И если вы попытаетесь создать JSON для исходного списка candies
, он выдаст:
{"head":{"name":"M\u0026M\u0027s","price":1.99},"tl":{}}
Что отражает структуру списка head :: tail
.
Gson - это библиотека, в основном используемая с кодом Java.
Для Scala существует множество вариантов. Я бы предложил попробовать некоторые из ответов на этот вопрос .