2012-02-10 19 views
6

पर ऑटोबीन के साथ अज्ञात प्रकार के JSON ऑब्जेक्ट्स को पार्स करना मेरा सर्वर JSON में ऑब्जेक्ट्स की एक सूची देता है। उदाहरण के लिए, वे Cat एस या Dog एस हो सकते हैं।जीडब्ल्यूटी

जब मुझे पता है कि वे सभी Cat एस होंगे, तो मैं आसानी से काम करने के लिए AutoBeanCodex सेट कर सकता हूं। जब मुझे नहीं पता कि वे किस प्रकार हैं, हालांकि ... मुझे क्या करना चाहिए?

मैं अपनी सभी इकाइयों को एक प्रकार का क्षेत्र दे सकता हूं, लेकिन फिर मुझे AutoBeanCodex पर जाने से पहले प्रत्येक इकाई को पार्स करना होगा, जो बिंदु को हराने पर सीमाएं हैं। मेरे पास अन्य विकल्प क्या हैं?

उत्तर

8

बस इसे दूसरे दिन खेलना है, और इसे कुछ घंटों तक लड़ा, @Category विधियों और अन्य लोगों की कोशिश कर रहा है, जब तक मुझे यह नहीं मिला: आप Splittable प्रकार की संपत्ति बना सकते हैं, जो अंतर्निहित परिवहन प्रकार का प्रतिनिधित्व करता है बूलियन/स्ट्रिंग्स/सूचियों/मानचित्रों के लिए कुछ एन्कोडिंग। मेरे मामले में, मुझे कुछ लिफाफा प्रकार पता है जो डिजाइन समय पर तार पर जाता है, और कुछ अन्य संपत्ति के आधार पर, कुछ अन्य क्षेत्र अन्य ऑटोबेन्स की संख्या हो सकता है।

आपको संकलन समय पर अन्य बीन के प्रकार को जानने की भी आवश्यकता नहीं है, तो आप Splittable के तरीकों का उपयोग करके मूल्य प्राप्त कर सकते हैं, लेकिन अगर ऑटोबैन्स का उपयोग कर रहे हैं, तो लपेटे गए डेटा को परिभाषित करना अच्छा होता है।

interface Envelope { 
    String getStatus(); 
    String getDataType(); 
    Splittable getData(); 
} 

-

JSON पर भेजा (यदि आप प्राप्त करने के साथ ही डाटा भेजने Setters वांछित हो सकता है एक `Splittable में एक सेम एन्कोडिंग एक लिफाफे में इसे भेजने के लिए इसे डीकोड से भी आसान है) तार (शायद AutoBeanCodex का प्रयोग करके) डीकोड Envelope प्रकार में, और किस प्रकार getData() विधि से बाहर आ जाना चाहिए, कुछ इस तरह फोन बाहर

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
               SpecificNestedBean.class, 
               env.getData()).as(); 

नेस्टेड वस्तु प्राप्त करने के लिए के बाद आप तय कर लिया हैप्रकार और नेस्टेड प्रकार (ऊपर factory में) को भी AutoBeanFactory प्रकार की आवश्यकता नहीं है। यह आपको जेनेरिक ट्रांसपोर्ट इंस्टेंस से लिफाफे के पढ़ने/लिखने के बारे में बता सकता है, और डेटा के मॉडल (और नेस्टेड मॉडल) को डीकोड करने के लिए प्रत्येक dataType स्ट्रिंग प्रॉपर्टी के लिए एक विशिष्ट फैक्ट्री का उपयोग कर सकता है।