java - GSON: serialize/deserialize object of class, that have registered type hierarchy adapter, using ReflectiveTypeAdapterFactory.Adapter -
स्पष्ट होने के लिए, कुछ मॉडल को घुसाना:
इंटरफ़ेस ए {बूलीयन है सोमेकेज (); } क्लास एएडैप्टर JsonSerializer को लागू करता है & lt; A & gt; {सार्वजनिक जेएसनएलेमेंट सीरियललाइज़ (एक स्रोत, प्रकार प्रकार ओफ़एसआरसी, जेएसओएनएसरिअलाइजेशन कॉन्टैक्ट संदर्भ) {अगर (एसआरसी। सोमेकेज ()) {/ * कुछ तर्क * / रिटर्न परिणाम; } और {JsonObject json = नया JsonObject (); जेसनईलेमेंट वैल्यूजसन = & lt; ??? & gt ;; // TODO serialize src जैसे पॉजो जेसन.एड (src.getClass ()। GetSimpleName (), valueJson); वापसी json; }}} जीएसन जीएसएन = नया जीएसओएनबीइल्डर ()। पंजीयक टाइप हायरार्की एडेप्टर (ए। क्लास। नया एएडैप्टर ()) .create (); ए
के कुछ उदाहरण को सच्चाई कैसे संभव है, जो है सोमेकेज ()
= false
, किसी अन्य ऑब्जेक्ट की तरह, जो ReflectiveTypeAdapterFactory.Adapter
।
आप एक कस्टम लिख सकते हैं और आने वाले ऑब्जेक्ट के isSomeCase ()
के परिणाम को संभाल सकते हैं लिखते हैं ()
विधि और वहां अपना तर्क लागू करें:
सार्वजनिक श्रेणी एटीपीएडैप्टरफैक्चरर लागू करने के लिए TypeAdapterFactory {सार्वजनिक प्रकार एडेप्टर & lt; A & gt; बनाओ (जीएसन जीएसएन, टाइपटोकन प्रकार) (यदि (! एवलैस.आईएसएएसएसग्नेबलफ्रॉम् (टाइप.गेटआरॉटीप ())) // जांचें कि आने वाले कच्चे टाइप एक इंटरफ़ेस रिटर्न बातिल का उदाहरण है; } अंतिम प्रकारएडैप्टर & lt; A & gt; Delegate = gson.getDelegateAdapter (यह, प्रकार); नया प्रकार एडेप्टर वापस लौटाएं & lt; ए & gt; () {@ ओवरराइड पब्लिक वॉअइड लिस्ट (जेसनउर्फर आउट, ए वैल्यू) IOException फेंकता है {if (value.isSomeCase ()) {// आपका कस्टम लॉजिक यहां बाहर है। बीबीआई ऑब्जेक्ट (); । Out.name ( "x") मूल्य (0); out.endObject (); } Else {// डिफ़ॉल्ट सीरियलाइजेशन यहाँ delegate.write (बाहर, मान); }} @ ओवरराइड पब्लिक ए पढें (जेसनरीडर में) IOException फेंकता है {रिटर्न प्रतिनिधि। रीड (इन); }}; }}
टेस्ट:
अंतिम जीएसएन्यूबिल्डर gsonbuilder = नया GsonBuilder (); // कस्टम प्रकार एडाप्टर फ़ैक्टरी पंजीकृत करें gsonbuilder.registerTypeAdapterFactory (नया एटीपीएडाप्टरफैक्चररी ()); अंतिम जीएसन जीएसएन = जीसनइबिल्डर.सेंट (); एक aSomeCaseTrue = नया एआईएमपीएल (सच); System.out.print ("aSomeCaseTrue:" + gson.toJson (aSomeCaseTrue)); // लिखता है; ASomeCaseTrue: {"x": 0} एक aomeCaseFalse = नया एआईएमपीएल (गलत); System.out.print ("aSomeCaseFalse:" + gson.toJson (aSomeCaseFalse);); // लिखता है; ASomeCaseFalse: {"someCase": false}
अतिरिक्त:
1) आपका इंटरफ़ेस:
इंटरफ़ेस ए {बूलीयन है सोमेकेज (); }
2) एक नमूना वर्ग जो आपके नमूना इंटरफ़ेस को कार्यान्वित करता है:
वर्ग एआईएमपीएल एक {बूलियन कुछ केस लागू करता है; सार्वजनिक एआईएमपीएल (बूलियन मान) {this.someCase = value; } @ ओवरराइड पब्लिक बूलियन सोमेकेज () {कुछ कैस लौटें; }}
Comments
Post a Comment