Grails中的深度JSON序列化无法正常工作

时间:2013-06-11 15:45:27

标签: json grails

我有一个像这样的对象结构:

class Message {

   static mapWith="mongo"
   static embedded = ['to', 'author', 'comments', 'tags']

   ObjectId id
   Set<ObjectId> to
   Author author
   String text
   List<Comment> comments
   Set<String> tags
   Date postedOn
   Date lastEditOn
}

class Comment {
   Author author
   String text
   int thumbsUp = 0
   int thumbsDown = 0
   Date postedOn
   Date lastEditOn
}

以下代码序列化到JSON

render Message.findStreamFor( session.user, groups, 0, 20 ) as JSON

但是,没有任何嵌入式集合被序列化。他们只是失踪了。我已经尝试将以下内容添加到我的Config.groovy中,以使其默认为深度序列化:

grails.converters.json.default.deep=true

但这似乎没有任何改变。我已经看到在调试器中从MongoDB填充了对象,但它只是没有使它成为JSON序列化输出。我该如何解决这个问题?

更新

好的我通过调试代码得到了更多。在DefaultGrailsDomainClass.getPersistentProperties()内部,它不会在调用时将集合作为属性返回。而JSON序列化程序从不访问它们。在DomainClassMarshaller的第103行是对getPersistentProperties的调用,它没有返回所有属性。

    GrailsDomainClassProperty[] properties = domainClass.getPersistentProperties();

好像这是一个错误!怎么没有人发现过这个?

1 个答案:

答案 0 :(得分:1)

您可以使用GSON plugin。它在类似的问题上没有帮助我,但它可能对你有帮助。

编写此插件是为了克服标准Grails JSON转换器中的嵌套对象反序列化问题,但在序列化它们时也可能更好。