【问题标题】:Serialize java.nio.file.Path with JsonBuilder in Groovy在 Groovy 中使用 JsonBuilder 序列化 java.nio.file.Path
【发布时间】:2020-03-05 14:20:14
【问题描述】:

我正在尝试序列化一个包含java.nio.file.Path 实例的对象,并且由于path 是一个接口,我正在接收StackOverflow Exception

我已经检查了这个答案:https://stackoverflow.com/a/36966590/11325201 并想在groovy 中为我的用例实现一个类型适配器,但我没有找到JsonBuilder 等效于GsonBuilder 的registerTypeAdapter 或registerTypeHierarchyAdapter

如何在 Groovy 中实现类似的解决方案?

【问题讨论】:

    标签: java json groovy json-serialization jsonbuilder


    【解决方案1】:

    您可以在构建时将JsonGenerator 对象传递给构建器。此对象允许您指定各种选项,包括类型转换器,您使用 Class 和闭包注册这些选项。在这个例子中,转换器只是调用路径上的toString。

    def generator = new JsonGenerator.Options()
                                     .addConverter(Path) { Path p -> p.toString() }
                                     .build()                 
    
    def json = new JsonBuilder(myObjContainingPathProperties, generator).toPrettyString()
    

    online GroovyDocs for JsonGenerator 不显示任何内容(可能是 3.0 版中的 GroovyDoc 生成器错误),但 GroovyDocs for 2.5 work。

    【讨论】:

    • 不幸的是,我受到企业软件包的限制——它们是没有 JsonGenerator 的 Groovy 2.4.5。还有其他选择吗?
    • 这不是很优雅,但是您可以将您的对象转换为Map,将所有Path 值替换为相应的String 表示形式。然后你会序列化 Map 而不是对象。
    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 2014-11-03
    • 2012-06-13
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多