Я работаю с API, который возвращает несколько ответов JSON, которые имеют общие поля данных между ними. Я использую Моши для десериализации ответов на объекты.
Например, скажем, ответ от одного вызова метода API имеет такую структуру
class Book(
val title: String,
val genre: String,
...
val authorName: String,
val authorAge: Int,
val authorCountry: String
}
И еще одна имеет эту структуру
class Article(
val title: String,
val subject: String,
...
val authorName: String,
val authorAge: Int,
val authorCountry: String
}
Я ищу решение, позволяющее перемещать общие поля (например, сведения об авторе) в отдельный класс и обрабатывать его так, как если бы оно было получено из вложенной структуры JSON, тогда как фактический JSON получил из API остается неизменным и остается плоским.
class Book(
val title: String,
val genre: String,
...
val author: Author
}
Я хочу сделать это, чтобы я мог:
- Рассматривать автора как отдельную сущность, когда это необходимо, без необходимости
передать
Book
или Article
объекты вокруг
- Избегайте дублирования полей
Author
Текущие решения, о которых я могу подумать:
- Используйте промежуточный класс, как пример
EventJson
в документах Моши.
Я хочу избежать этого, потому что мои классы данных довольно большие, и я
пришлось бы дублировать все поля в промежуточном классе.
- Сделать подклассы классов
Book
и Article
равными Author
. я
не нравится это, потому что книга не является автором и потому, что она не позволяет
я рассматриваю автора как отдельную сущность.
Есть предложения?