Moshi: несколько свойств JSON в одном поле класса - PullRequest
0 голосов
/ 11 апреля 2019

Допустим, у нас есть следующие структуры JSON:

"data": [
        {
            "order_id": 460,
            "order_no": "365"
        },
        ....
]

"data": {
        "id": 460,
        "order_no": "365"
}

Один - это список заказов, другой - детали заказа.Для разбора таких структур я хотел бы повторно использовать один и тот же класс.

data class Order (
    @Json(name = "id") val id: Int?,
    @Json(name = "order_id") val orderId: Int?,
    @Json(name = "order_no") val orderNumber: Int
)

data class OrderListingResponse (
    @Json(name = "data") val data: List<Order>
)

data class OrderDetailsResponse (
    @Json(name = "data") val data: Order
)

Эта реализация выглядит нормально, пока различное именование свойств с одинаковыми данными не станет слишком большим.Я хотел бы объединить несколько свойств в одно, чтобы я мог сделать свой повторно используемый класс короче и более элегантным для перечисления и деталей заказа:

data class Order (
        @Json(names = ["id", "order_id"]) val id: Int,
        @Json(name = "order_no") val orderNumber: Int
    )

Как добиться такого результата с помощью Moshi, не создавая дополнительные поля в классеи просто использовать одно и то же поле с разными именами свойств в JSON?

Оцените, можете ли вы предоставить пример кода для реализации пользовательских аннотаций.Использование интерфейсов это не то, что я ищу.

1 Ответ

0 голосов
/ 16 апреля 2019

Чтобы создать несколько полей JSON в одном свойстве, необходимо создать адаптер настраиваемого типа.

Шаги:

  1. Создайте адаптер нестандартного типа, который преобразует ваши поля json в свойства. (используйте вашу логику order_id / id).

  2. Зарегистрируйте адаптер нестандартного типа с помощью Moshi.Builder

...