जीएसओएन केवल फ़ील्ड्स (निजी, सार्वजनिक, संरक्षित) का उपयोग क्यों करता है? क्या केवल गेटर्स और सेटर्स का उपयोग करने के लिए जीएसओएन को बताने का कोई तरीका है?जीएसओएन फ़ील्ड का उपयोग क्यों करता है न कि गेटर्स/सेटर?
उत्तर
आम तौर पर जब आप ऑब्जेक्ट को क्रमबद्ध/deserialize करते हैं, तो आप ऑब्जेक्ट की स्थिति की एक सटीक प्रति के साथ समाप्त करने के लिए ऐसा कर रहे हैं; इस प्रकार, आप आम तौर पर एक ओओ डिजाइन में वांछित encapsulation को बाधित करना चाहते हैं। यदि आप encapsulation को बाधित नहीं करते हैं, तो किसी ऑब्जेक्ट के साथ समाप्त होना संभव नहीं हो सकता है जिसमें deserialization के बाद सटीक उसी स्थिति है जैसा कि पहले क्रमिकरण से पहले था। इसके अतिरिक्त, उस मामले पर विचार करें जहां आप किसी विशेष संपत्ति के लिए एक सेटटर प्रदान नहीं करना चाहते हैं। यदि आप गेटर्स और सेटर्स के माध्यम से काम कर रहे हैं तो सीरियलाइजेशन/deserialization कैसे कार्य करना चाहिए?
क्या केवल गेटर्स और सेटर्स का उपयोग करने के लिए जीएसओएन को बताने का कोई तरीका है?
अभी तक नहीं।
the design doc से:
[टी] यहाँ भी गुण का समर्थन करने के लिए अच्छा तर्क हैं। हम जेसन फील्ड को इंगित करने के लिए वैकल्पिक मैपिंग के रूप में गुणों का समर्थन करने के लिए बाद के संस्करण में जीसन को बढ़ाने का इरादा रखते हैं। अभी के लिए, जीसन फ़ील्ड आधारित है।
getters और setters के लिए Gson समर्थन के संबंध में अंदर कुछ fromJson-विधि है, मेलिंग सूची से इस पर नवीनतम अद्यतन है कि "[टी] वह इस तरह के एक सुविधा Gson में बनाने की संभावनाओं को काफी कम कर रहे हैं है ... "https://groups.google.com/forum/#!topic/google-gson/4G6Lv9PghUY –
मुझे नहीं लगता कि getters और setters का उपयोग नहीं करना चाहिए, क्रिस शैफर इस सुंदर इस जवाब में अच्छा बताते हैं। – Sentry
यह 3 साल बाद है। कोई सुधार? –
यह use getters को Gson पैच करने के लिए संभव है।
मैं यह निर्धारित करने में सक्षम होना चाहता हूं कि कौन से चरों को गेटर और सेटर – CQM
हमारे ऐप में यह कैसे काम करता है इसकी अस्पष्ट रूपरेखा यह है कि हमारे पास TypeAdapter
कार्यान्वयन हैं - कुछ विशिष्ट मूल्य-जैसी वस्तुओं के लिए और कुछ बीन-स्टाइल ऑब्जेक्ट्स के लिए जहां हम जानते हैं कि जावाबीन तर्क काम करेगा। हम Gson
ऑब्जेक्ट बनाने से पहले इन सभी को GsonBuilder
पर जाम करते हैं।
दुर्भाग्य से, जीएसओएन वास्तव में Object[]
जैसे हैंडलिंग प्रकारों पर बकवास है। जब हम विधि पैरामीटर का प्रतिनिधित्व करने के लिए JSON ऑब्जेक्ट बनाने की कोशिश कर रहे थे तो हमने ज्यादातर इसे देखा। इसके लिए वर्कअराउंड कस्टम TypeAdapter
उदाहरण बनाना था जो विधियों को प्रतिबिंबित करता था। (इसका मतलब यह है कि आप कॉल करने का इरादा रखते हुए प्रति Gson
उदाहरण का उपयोग करके समाप्त हो जाते हैं ...)
का उपयोग करना चाहिए ऑब्जेक्ट में किसी भी चीज़ को deserializing कैसे संवेदनापूर्वक संभालना होगा? आप यह अनुमान लगाना चाहेंगे कि इसे deserialize करने के लिए क्या है? –
ऑब्जेक्ट के लिए, या सामान्य रूप से पॉलिमॉर्फिक सामान के लिए, उनके पास शायद एक विशेषता रिकॉर्ड हो सकता है जिसे एडाप्टर ने मूल रूप से क्रमबद्ध किया था। लेकिन स्मृति से, मुझे लगता है कि {"ए", 2, "बी"} जैसी स्पष्ट सामग्री भी ऑब्जेक्ट [] के लिए निराशाजनक नहीं थी। – Trejkaz
- 1. सी # 3.0 स्वचालित गुण, फ़ील्ड का उपयोग क्यों न करें?
- 2. जीएसओएन पार्सिंग गतिशील JSON फ़ील्ड
- 3. जीएसओएन
- 4. मुझे पीएनजी का उपयोग क्यों करना चाहिए, न कि जेपीजी?
- 5. जीएसओएन
- 6. जीएसओएन
- 7. HTTP टीसीपी का उपयोग क्यों करता है?
- 8. Heroku Postgresql का उपयोग क्यों करता है?
- 9. जीएसओएन के साथ गतिशील JSON फ़ील्ड को कैसे पार्स करें?
- 10. कक्षा का आकार केवल डेटा सदस्यों पर निर्भर करता है, न कि सदस्य कार्यों पर?
- 11. PHP में 'संरक्षित' या 'निजी' का उपयोग क्यों न करें?
- 12. मुझे जेएमएस का उपयोग क्यों करना चाहिए, न कि आरएमआई + कतार?
- 13. Button_to POST Link_to का उपयोग करता है GET का उपयोग करता है, क्यों? आरओआर
- 14. फ्लास्क का लॉगिन तरीका 'GET' का उपयोग क्यों करता है?
- 15. जीएसओएन सीरियलाइजेशन बहुत धीमा
- 16. डिजस्ट्रा का एल्गोरिदम क्यों कम-कुंजी का उपयोग करता है?
- 17. विशिष्ट निर्माता का उपयोग करने के लिए फोर्स जीएसओएन
- 18. डिजस्ट्रा का एल्गोरिदम क्यों काम करता है?
- 19. क्यों नाम एक प्रकार का बनाते हैं न कि सिर्फ एक प्रकार?
- 20. आईबीएम वर्कलाइट का उपयोग क्यों करें यदि यह आखिरकार फोनगैप का उपयोग करता है?
- 21. जीएसओएन: कस्टम ऑब्जेक्ट deserialization
- 22. वेब अनुप्रयोग जो कि विज्ञान-सीखने का उपयोग करता है
- 23. रेपो क्या है और Google इसका उपयोग क्यों करता है?
- 24. छोटे VARCHAR (एन) फ़ील्ड का उपयोग क्यों करें?
- 25. चेक स्टाइल क्यों सुझाव देता है कि मैं अंतिम विधि का उपयोग करता हूं?
- 26. एमडीएनएस (बोनजोर, अवही, आदि) यूडीपी का उपयोग क्यों करता है?
- 27. एनएफएस डिफ़ॉल्ट रूप से यूडीपी का उपयोग क्यों करता है?
- 28. Magento प्रति सत्र 2 कुकीज़ का उपयोग क्यों करता है?
- 29. फ्लेक्स एक थ्रेडेड मॉडल का उपयोग क्यों करता है?
- 30. MySQL डिफ़ॉल्ट रूप से latin1_swedish_ci का उपयोग क्यों करता है?
"गणना किए गए फ़ील्ड" के बारे में हम बाहरी दुनिया को कैसे प्रदान करना चाहते हैं? सोचने के तरीके में, मुझे एक फ़ील्ड बनाना चाहिए और हर बार जब मैं अपने POJO फ़ील्ड को अपडेट करता हूं तो इस फ़ील्ड को अपडेट करना चाहिए? Urgh ... –
@ Frédéric - मैं वास्तव में serialization के लिए संपत्ति गेटर्स और सेटर्स का उपयोग करके शुरू की गई कठिनाइयों को इंगित कर रहा हूँ; परिकलित गुण भी अपनी समस्याओं का परिचय देंगे। उदाहरण के लिए, यदि आप किसी को एक धारावाहिक वस्तु देते हैं, तो वे गणना की गई संपत्ति के मूल्य को अपडेट करते हैं और इसे वापस पास करते हैं, एप्लिकेशन को deserialization को कैसे संभालना चाहिए? संपत्ति का पर्दाफाश अद्यतन नहीं किया गया था या अपवाद फेंक दिया गया था? साथ ही, यदि वे उन गुणों को अद्यतन करते हैं जिन पर गणना की गई संपत्ति आधारित थी, तो ऑब्जेक्ट स्थिति वास्तव में अमान्य है, और उस संपत्ति के मूल्य को पढ़ने में फ्लैट गलत है। –
मैं @ फ्रैडेरिक से सहमत हूं; कुछ किनारे के मामले हैं जो गुण उपायों का उपयोग कर योग्यता रखते हैं। मैं बस उस स्थान पर भाग गया जहां मेरे पास एक ऑब्जेक्ट पर एक बाइट सरणी है जिसे मैं बाहर करना चाहता हूं और इसके बजाय एक स्ट्रिंग वापस करना चाहता हूं। अब मैं ऑब्जेक्ट को डीटीओ के माध्यम से अनुकूलित करने के साथ छोड़ दिया गया हूं। –