有没有一种通用的方法使用transit来(反)序列化数组?
我发现自己处于这种情况
(require '[cognitect.transit :as transit])
(def array-write-handler (transit/write-handler "pod.babashka.sql/array" vec))
(def array-type (class (into-array Object [])))
(defn write-transit [v]
(let [baos (java.io.ByteArrayOutputStream.)]
(transit/write (transit/writer baos :json {:handlers {array-type array-write-handler}}) v)
(.toString baos "utf-8")))
(prn (write-transit (into-array Object ["foo"]))) ;; works
(prn (write-transit (into-array String ["foo"]))) ;; ERROR
看起来你必须为一个类型显式地进行序列化编码,这可能导致错误,且很麻烦。在transit确定无法编码某种类型的对象之前,我能使用某种形式的回退处理器吗?在这个回退中,我可以检查对象是否是数组,使用 .isArray()?
我目前解决这个问题的方法是使用walk/postwalk,并创建一些自定义表示形式,但这似乎违背了transit的目的。