Как определить пользовательские писатель и читатель upickle

Предположим, у меня есть класс case, типы членов которого - Scala/Java, которые я не могу или не хочу изменять, и которые не поддерживаются модулем записи / чтения по умолчанию uPickle. Есть ли способ сказать, как это сделать? Чтобы быть более понятным, давайте возьмем пример.

Предположим, у меня есть эти классы:

case class MyClass1 (a:BigInteger, b:BigInteger, c:Int, d:String)
case class MyClass2 (a:BigInteger, b:BigInteger, d:String)

(Я знаю, что uPickle может управлять BigInt, но предположим, что я должен использовать java.math.BigInteger и усложнить, что я хочу использовать шестнадцатеричное представление вместо десятичного. (Поэтому nb.toString(16) для преобразования в hexa, и соответствующий конструктор наоборот)

Есть ли способ сказать читателю и писателю uPickle, как управлять BigInteger таким образом, чтобы он автоматически использовался при каждом появлении BigInteger? Таким образом, мне не нужно писать определенный код для каждого из моих классов (MyClass1 и MyClass2).

Документация uPickle говорит только о "пользовательских сборщиках" для классов, которые контролируются разработчиком. Что, очевидно, не относится к java.math.BigInteger. Наиболее прямым подходом было бы, я полагаю, определить пользовательский читатель / писатель, который расширяет стандартное значение, предоставляемое uPickle? Если некоторые неявные преобразования могут быть предоставлены. Но я не вижу, как это сделать, и если это вообще возможно.

0 ответов

Другие вопросы по тегам