की सूची के लिए जीएसओएन का उपयोग करके deserializer मैं BasicNameValuePair ऑब्जेक्ट्स की कुछ सूची के लिए कस्टम जीसन सीरियलाइज़र/deserialiser को लागू करने की कोशिश कर रहा हूं।कस्टम सीरिएलाइज़र - बेसिकनाम वैल्यूपेयर
मैं (क्रमबद्धता के लिए) आंशिक समाधान कोड देखा यहाँ: How do I get Gson to serialize a list of basic name value pairs?
हालांकि मैं भी लागू करने के लिए अक्रमांकन चाहता था और मैं अपने संभावना की कोशिश की और कोड यहाँ है:
package dto;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.message.BasicNameValuePair;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
public class KeyValuePairSerializer extends TypeAdapter<List<BasicNameValuePair>> {
@Override
public void write(JsonWriter out, List<BasicNameValuePair> data) throws IOException {
out.beginObject();
for(int i=0; i<data.size();i++){
out.name(data.get(i).getName());
out.value(data.get(i).getValue());
}
out.endObject();
}
@Override
public List<BasicNameValuePair> read(JsonReader in) throws IOException {
ArrayList<BasicNameValuePair> list=new ArrayList<BasicNameValuePair>();
in.beginObject();
while (in.hasNext()) {
String key = in.nextName();
String value = in.nextString();
list.add(new BasicNameValuePair(key,value));
}
in.endObject();
return list;
}
}
कोड सूची को शुरू करने और भरने के लिए
ArrayList<BasicNameValuePair> postParameters=new ArrayList<BasicNameValuePair>();
postParameters.add(new BasicNameValuePair("some_key","some_value"));
और यहां है कोड नए KeyValuePairSerializer वर्ग का उपयोग करें:
GsonBuilder gsonBuilder= new GsonBuilder();
gsonBuilder.registerTypeAdapter(KeyValuePairSerializer.class, new KeyValuePairSerializer());
Gson gson1=gsonBuilder.create();
//serialization works just fine in the next line
String jsonUpdate=gson1.toJson(postParameters, KeyValuePairSerializer.class);
ArrayList<BasicNameValuePair> postParameters2 = new ArrayList<BasicNameValuePair>();
//postParameters2 = gson1.fromJson(jsonUpdate, KeyValuePairSerializer.class); //? how to cast properly
//deserialization throws an error, it can't cast from ArrayList<BasicNameValuePair> to KeyValuePairSerializer
gson1.fromJson(jsonUpdate, KeyValuePairSerializer.class);
समस्या यह है कि अंत में एक अपवाद फेंकता है और मैं नहीं जानता कि जहां वास्तव में समस्या यकीन है कि कैसे प्राप्त करने के लिए अंतिम पंक्ति लिखने के लिए नहीं है और अभी भी है परिणाम नए पोस्ट पैरामीटर 2 ArrayList में वापस।
ऐसी चीज करने से मेरी नई परिभाषित कक्षा KeyValuePairSerializer को अनदेखा कर दिया जाएगा और ओवरडिन विधि को कॉल नहीं किया जाएगा: पढ़ें। – Arise
दरअसल, यदि आप 'रजिस्टर टाइप टाइप एडाप्टर()' को कॉल करते हैं तो आप इसे अनदेखा नहीं करेंगे। – Nachi
ऐसा लगता है कि यह मामला नहीं है। रजिस्टर टाइप टाइप एडाप्टर केवल सीरिएलाइज़र के लिए काम करता है जो deserializer के लिए नहीं है। – Arise