我有一个像这样的对象结构:
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();
好像这是一个错误!怎么没有人发现过这个?
答案 0 :(得分:1)
您可以使用GSON plugin。它在类似的问题上没有帮助我,但它可能对你有帮助。
编写此插件是为了克服标准Grails JSON转换器中的嵌套对象反序列化问题,但在序列化它们时也可能更好。