JSON のディープ オプションを使用してカスタム JSON マーシャラーを使用することは可能ですか?
私はいくつかのことを試してきましたが、深いオプションがなくても、カスタム マーシャラーは正常に動作しています。しかし、JSON.use('deep') を追加すると、カスタム マーシャラーが呼び出されることはありません...
私がしなければならないことは他にありますか?
これまでに試したこと(これはすべてBootstrapで、優先度パラメーターの有無にかかわらず(値1および999999))。また、最初と最後に JSON.use('deep') 呼び出しを入れてみましたが、結果は同じでした。
オプション1
JSON.use("deep") {
JSON.registerObjectMarshaller(new UserMarshaller(),999999)
JSON.registerObjectMarshaller(new TeamMarshaller(),999999)
JSON.registerObjectMarshaller(new LevelMarshaller(),999999)
JSON.registerObjectMarshaller(new BehaviourMarshaller(),999999)
JSON.registerObjectMarshaller(new AchievementMarshaller(),999999)
JSON.registerObjectMarshaller(new PercentageAchievementMarshaller(),999999)
JSON.registerObjectMarshaller(new IntervalMarshaller(),999999)
JSON.registerObjectMarshaller(new MissionMarshaller(),999999)
JSON.registerObjectMarshaller(new ActivityMarshaller(),999999)
JSON.registerObjectMarshaller(new RecentActivityMarshaller(),999999)
JSON.registerObjectMarshaller(new ProfileMarshaller(),999999)
JSON.registerObjectMarshaller(new StatusMarshaller(),999999)
JSON.registerObjectMarshaller(ObjectId){ObjectId oid->
return oid.toString()
}
}
JSON.use('deep')
オプション 2
JSON.registerObjectMarshaller(new UserMarshaller(),999999)
JSON.registerObjectMarshaller(new TeamMarshaller(),999999)
JSON.registerObjectMarshaller(new LevelMarshaller(),999999)
JSON.registerObjectMarshaller(new BehaviourMarshaller(),999999)
JSON.registerObjectMarshaller(new AchievementMarshaller(),999999)
JSON.registerObjectMarshaller(new PercentageAchievementMarshaller(),999999)
JSON.registerObjectMarshaller(new IntervalMarshaller(),999999)
JSON.registerObjectMarshaller(new MissionMarshaller(),999999)
JSON.registerObjectMarshaller(new ActivityMarshaller(),999999)
JSON.registerObjectMarshaller(new RecentActivityMarshaller(),999999)
JSON.registerObjectMarshaller(new ProfileMarshaller(),999999)
JSON.registerObjectMarshaller(new StatusMarshaller(),999999)
JSON.registerObjectMarshaller(ObjectId){ObjectId oid->
return oid.toString()
}
JSON.use('deep')
また、Configオプションも試しましたが、効果がなく、深い変換がトリガーされません...
更新: 例 1 つのミッションに多くの成果があり、ミッションとその成果を取得したい
class Mission {
/** Identificador */
ObjectId id
/** Nombre */
String name
/** Indica si la misión está o no activa */
boolean active = true
List<AchievementBase> achievements = []
static hasMany = [achievements:AchievementBasen]
}
class AchievementBase {
/** Identificador */
ObjectId id
/** Nombre del logro */
String name
/** Valor booleano para indicar si el logro está o no activo */
boolean active = true
/** Valor booleano para indicar si el logro está o no visible */
boolean hidden = false
}
そして、これは私が書いていたマーシャラーの一例です
class MissionMarshaller implements ObjectMarshaller<JSON>{
@Override
public boolean supports(Object object) {
object instanceof Mission
}
@Override
public void marshalObject(Object object, JSON converter)
throws ConverterException {
JSONWriter writer = converter.getWriter()
writer.object()
writer.key('id').value(object.id)
.key("name").value(object.name)
.key('achievements').value(object.achievements)
writer.endObject()
}
}
class AchievementMarshaller implements ObjectMarshaller<JSON>{
@Override
public boolean supports(Object object) {
object instanceof Achievement
}
@Override
public void marshalObject(Object object, JSON converter)
throws ConverterException {
JSONWriter writer = converter.getWriter()
writer.object()
writer.key('id').value(object.id)
.key("name").value(object.name)
writer.endObject()
}
}