2012-03-04 63 views
4

有没有办法轻松指定是以深层还是浅层方式将对象转换为JSON?我知道你可以通过指定类似下面的一些配置中的Config.groovy文件grails.converters.JSON实用程序:在Grails中选择深层或浅层JSON序列化

grails.converters.json.default.deep = true 

,但是当我将某些对象,我不想深转换。

我也看到有人使用推荐的JSON.use(“深”),但我得到了以下错误:

Error 2012-03-04 00:39:13,673 ["http-bio-8080"-exec-1] ERROR errors.GrailsExceptionResolver - IllegalAccessException occurred when processing request: [GET] /Quaffic/home/json 
Class org.codehaus.groovy.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller can not access a member of class org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone with modifiers "public". Stacktrace follows: 
Message: Class org.codehaus.groovy.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller can not access a member of class org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone with modifiers "public" 
    Line | Method 
->> 198 | value   in grails.converters.JSON 

看起来这可能是一个joda.time错误,但是这并未”当我只使用普通的Config.groovy技术时就会发生。有点困惑...

任何帮助将是伟大的!

+1

我得到了同样的问题。似乎joda-time插件的joda-time转换器在JSON.use(“deep”)之后被调用。他们是如果你注册他们手动虽然。 JSON.use(“深”)JodaConverters.registerJsonAndXmlMarshallers()如果我想出更好的东西,我会告诉你。 – gogstad 2012-08-04 13:34:09

回答

6

我的解决方案是不依赖深层/浅层json世代。我创建了一张地图,插入了元素,并对其进行了序列化。可能不是最佳做法,但它可以完成工作。

+0

也一样,一定是更好的办法。 – Derek 2013-02-02 23:13:26