2013-03-18 12 views
13

के बाद ऑब्जेक्ट निर्माण पूरा करना मैंने अपने एंड्रॉइड एप्लिकेशन में ऑब्जेक्ट्स के पदानुक्रम को क्रमबद्ध करने और डी-क्रमबद्ध करने के लिए जीएसओएन का सफलतापूर्वक उपयोग करना शुरू कर दिया है।जीएसओएन deserialization

वस्तुओं धारावाहिक की जा रही के कुछ सदस्यों जो मैं (या वैकल्पिक GSON एनोटेशन का उपयोग उन्हें धारावाहिक जा रहा है को रोकने के लिए अन्यथा) transient के रूप में चिह्नित करना होगा क्योंकि वे वस्तुओं के लिए संदर्भ है कि मैं उत्पादन JSON के हिस्से के रूप को क्रमानुसार नहीं करना चाहते हैं स्ट्रिंग। वे संदर्भ उन वस्तुओं के लिए हैं जिन्हें अलग-अलग तरीकों से अलग किया जाना चाहिए।

एक बार जब संरचना जावा ऑब्जेक्ट्स में डी-सीरियलाइज्ड हो जाती है, तो किसी बिंदु पर मुझे उन संदर्भों को भरने की आवश्यकता होती है। मैं शायद setXXX() प्रकार की विधियों की एक श्रृंखला का उपयोग करके आसानी से ऐसा कर सकता हूं, लेकिन जब तक यह नहीं किया जाता है, तो वे वस्तुएं अपूर्ण स्थिति में होती हैं। इसलिए मैं सोच रहा हूं कि इस पर एक और मजबूत दृष्टिकोण है या नहीं।

तरीके मैं अब तक के बारे में सोचा है

  • वस्तुओं फेंक है एक RuntimeException (या अधिक उपयुक्त कुछ) वे अपूर्ण स्थिति में कर रहे हैं; यानी, अगर उन्हें कुछ काम करने के लिए कहा जाता है जब कुछ प्रारंभिक विधि नहीं कहा जाता था।

  • धारावाहिक बिट्स को अलग डेटा मॉडल ऑब्जेक्ट में अलग करें। दूसरे शब्दों में, उन सामानों को निकालें जिन्हें क्रमबद्ध नहीं किया जा सकता है। जीएसओएन डी-सीरियलाइजेशन के बाद, उन रचनाओं में उन डेटा ऑब्जेक्ट्स का उपयोग करके 'असली' ऑब्जेक्ट्स का निर्माण करें। यह कुछ हद तक जीएसओएन का उपयोग करने की सुविधा को हराने के लिए प्रतीत होता है।

  • उन वस्तुओं के विशेष निर्माण को संभालने के लिए जीएसओएन के लिए एक कस्टम deserializer लिखें।

उत्तर

5

मैं संभावना है, दूसरा दृष्टिकोण ले क्योंकि जैसा कि मैंने आम तौर पर मेरी अनुप्रयोगों के लिए डिजाइन, कुछ भी है कि धारावाहिक की जरूरत होगी/deserialized वास्तव में सिर्फ सादे पुराने डेटा, या POJOs अगर आप पसंद करते है। अगर मुझे अपने इच्छित काम करने के लिए सीरियलाइजेशन एपीआई को कस्टमाइज़/कॉन्फ़िगर करने की आवश्यकता है, तो मैं सीरियलाइज किया जा रहा है इसे सरल बनाना चाहता हूं, इसलिए सीरियलाइजेशन एपीआई को अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता नहीं है।

इसलिए, यदि मेरे पास एक अधिक जटिल डेटा मॉडल है, तो जिनके हिस्सों को धारावाहिक/deserialized नहीं किया जाना है, तो मैं इसे पीओजेओ का एक सरल सेट निकालने के लिए, एक अवधारणात्मक रूप से अलग डेटा मॉडल के रूप में serialization/अक्रमांकन। इसके बाद वास्तव में दो डेटा मॉडल के बीच मैप करने के लिए एक अतिरिक्त कदम की आवश्यकता होती है, लेकिन यह आमतौर पर बहुत ही सरल है।

यदि तीसरा दृष्टिकोण पसंद किया जाता है, तो the Instance Creator feature पर भी ध्यान दें, क्योंकि यह deserialization प्रक्रिया को अनुकूलित करने में एक और उपयोगी हुक प्रदान कर सकते हैं।

+0

बहुत धन्यवाद। मुझे लगता है कि मुझे यह दूसरा दृष्टिकोण लेना चाहिए क्योंकि एक और चिंता यह है कि मेरा जेएसओएन आउटपुट वर्तमान में वास्तविक वर्ग कार्यान्वयन के साथ बहुत कसकर है, और मैं संस्करण के बारे में भी चिंतित हूं (अगर JSON फ़ाइल एक नए ऐप में लोड हो जाती है तो यह गन्दा हो सकता है वेशन जहां वर्ग संरचनाएं बदल गई हैं)। दृढ़ता के उद्देश्य के लिए 'मॉडल' कक्षाओं के पेड़ पर एप्लिकेशन कक्षाओं को मैप करना यह सब हल करने का एक अच्छा तरीका प्रतीत होता है।मूर्ख सवाल, लेकिन वास्तविक वर्किंग क्लास और डेटा मॉडल क्लास के बीच अंतर करने के लिए आप किस शब्दावली का उपयोग करेंगे? – Trevor

+0

शायद व्यूमोडेल, या पर्सिस्टेंस मॉडेल, या सीरियलाइज्ड मॉडल, या जेसनमोडेल, या इंटीग्रेशन मॉडेल, या सर्विसमोडेल, या कुछ और। –

8

चेक बाहर https://github.com/julman99/gson-fire

यह एक पुस्तकालय मुझे लगता है कि पोस्ट-क्रमबद्धता और बाद अक्रमांकन तरह के मामलों को संभालने के लिए Gson फैली बना है

यह भी कई अन्य शांत सुविधाओं है कि मैं Gson साथ समय के साथ की जरूरत गए है ।

संबंधित मुद्दे