आपको JSONSerializer और JSONDeserializer दोनों को पंजीकृत करने की आवश्यकता होगी। इसके अलावा आप अपने सभी इंटरफेस के लिए एक सामान्य एडाप्टर को निम्न तरीके से कार्यान्वित कर सकते हैं:
- सीरियलाइजेशन के दौरान: वास्तविक इम्प्लाइट क्लास प्रकार की मेटा-जानकारी जोड़ें।
- अक्रमांकन के दौरान: कि मेटा जानकारी प्राप्त करें और उस वर्ग
की JSONDeserailize फोन यहाँ कार्यान्वयन कि मैं खुद के लिए इस्तेमाल किया और ठीक काम करता है है।
public class PropertyBasedInterfaceMarshal implements
JsonSerializer<Object>, JsonDeserializer<Object> {
private static final String CLASS_META_KEY = "CLASS_META_KEY";
@Override
public Object deserialize(JsonElement jsonElement, Type type,
JsonDeserializationContext jsonDeserializationContext)
throws JsonParseException {
JsonObject jsonObj = jsonElement.getAsJsonObject();
String className = jsonObj.get(CLASS_META_KEY).getAsString();
try {
Class<?> clz = Class.forName(className);
return jsonDeserializationContext.deserialize(jsonElement, clz);
} catch (ClassNotFoundException e) {
throw new JsonParseException(e);
}
}
@Override
public JsonElement serialize(Object object, Type type,
JsonSerializationContext jsonSerializationContext) {
JsonElement jsonEle = jsonSerializationContext.serialize(object, object.getClass());
jsonEle.getAsJsonObject().addProperty(CLASS_META_KEY,
object.getClass().getCanonicalName());
return jsonEle;
}
}
तो आप के रूप में जहाँ तक मुझे इस बता अधिक विशेष रूप से गैर-संग्रह प्रकार के लिए काम नहीं करता है, या कर सकते हैं के रूप में
Gson gson = new GsonBuilder()
.registerTypeAdapter(IInterfaceOne.class,
new PropertyBasedInterfaceMarshal())
.registerTypeAdapter(IInterfaceTwo.class,
new PropertyBasedInterfaceMarshal()).create();
स्रोत
2012-02-02 02:29:05
करने के लिए [http://stackoverflow.com/a/22081826/3315914](http://stackoverflow.com/a/22081826/3315914) – rpax