Upickle: читать атрибут, который может быть String или Int, как String - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть поле, которое может исходить от остальных API в виде String или Int, но когда я читаю его, я всегда хочу прочитать его как String, т.е. если оно приходит как Int, я хочу сделать toString для него

    case class ZoneList(
        someField: Int,
        targetField: String
    )

    object ZoneList {
      implicit val rw: ReadWriter[ZoneList] = macroRW
    }

targetField это поле, о котором идет речь Глядя на http://www.lihaoyi.com/upickle/#CustomPicklers,, но все еще не думаю, что у меня достаточно ручки для запуска пользовательского сборщика

редактирование:

в итоге сделал это

implicit val anyToStringReader: Reader[Option[String]] =
    reader[ujson.Value].map[Option[String]] { j =>
      Try(j.toString()).toOption
    }

Предпочел бы, если бы я мог выделить только атрибут targetField, но в моем фактическом классе дел много полей, и я не думаю, что смогу это сделать, а также использую макрос по умолчанию. Если кто-нибудь знает, как дать мне знать

1 Ответ

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

Решено lihaoyi в gickler upickle:

"если вы хотите выделить этот атрибут, присвойте ему новый тип, который обернут вокруг Option String, и напишите свой сборщик для этого типа"

...