有没有使用 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 的目的。