के साथ Grails में कस्टम JSON marshaller का उपयोग करना JSON के गहरे विकल्प का उपयोग कर कस्टम JSON marshallers का उपयोग करना संभव है?गहरे विकल्प
मैं कुछ चीजों की कोशिश कर रहा हूं और गहरे विकल्प के बिना, मेरे कस्टम मार्शलर ठीक काम कर रहे हैं। लेकिन जब मैं JSON.use ('deep') जोड़ता हूं तो मेरे कस्टम मार्शलर्स को कभी नहीं कहा जाता है ...
क्या मुझे कुछ और करने की ज़रूरत है?
मैंने अब तक क्या प्रयास किया है (यह बूटस्ट्रैप में और साथ ही प्राथमिकता के बिना और बिना पैरामीटर (मूल्य 1 और 99 99 99))। इसके अलावा मैंने शुरुआत में 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')
और यह भी कॉन्फ़िग विकल्प कोशिश की, लेकिन कोई प्रभाव नहीं है, गहरी रूपांतरण ट्रिगर नहीं है ...
अद्यतन: एक उदाहरण एक मिशन में कई उपलब्धियां हैं और मैं एक मिशन और इसकी उपलब्धियों को पुनर्प्राप्त करना चाहता हूं
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
}
और यह marshaller का एक उदाहरण मैं
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()
}
}
यह समझ में नहीं आता है। "दीप" एक वस्तु के नेस्टेड गुणों को परिवर्तित करने के लिए यह कहने के लिए मार्शलर का एक विकल्प है। यदि आप रूपांतरण निर्दिष्ट कर रहे हैं, तो इसे सेट करने के लिए यह कैसे समझ में आता है? –
क्योंकि मैं अपने मार्शलर के अंदर भीतरी वस्तुओं को मार्शल करना चाहता हूं ... मुझे पता है कि मैं इसे मैन्युअल रूप से कर सकता हूं (यह मैंने अभी जारी रखने के लिए किया है) लेकिन मैं सोच रहा था कि यह एक और विकल्प मौजूद है – Eylen
उदाहरण प्रदान करें –