2013-09-02 6 views
5

द्वारा बनाई गई किसी ऑब्जेक्ट में फ़ंक्शन परिणाम जोड़ें, जीसन इस तरह का एक महान धारावाहिक/deserialization उपकरण है। ToJson-function का उपयोग करके एक मनमानी ऑब्जेक्ट का JSON प्रतिनिधित्व प्राप्त करना वाकई आसान है।gson: toJson()

अब मैं जावास्क्रिप्ट/jQuery के भीतर उपयोग करने के लिए ब्राउज़र पर अपनी ऑब्जेक्ट का डेटा भेजना चाहता हूं। इस प्रकार, मैं एक अतिरिक्त JSON तत्व को परिभाषित वस्तु के डोम वर्ग जो

public String buildDomClass() 

कैसे toJson समारोह के द्वारा बनाई गई मेरी स्ट्रिंग को यह स्ट्रिंग को जोड़ने के लिए एक गतिशील/memberless समारोह के रूप में मेरी वस्तु के भीतर कोडित है की ज़रूरत है?

कोई विचार?

धन्यवाद एक बहुत

उत्तर

2

का आसान तरीका है TypeAdapterFactory और एक अंतरफलक गठबंधन करने के लिए है।

सबसे पहले अपने विधि के लिए एक इंटरफेस:

public interface MyInterface { 
    public String buildDomClass(); 
    } 

तो कारखाना:, समझने के लिए

final class MyAdapter implements TypeAdapterFactory { 

    @Override 
    public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> tokenType) { 
    final TypeAdapter<T> adapter = gson.getDelegateAdapter(this, tokenType); 

    return new TypeAdapter<T>() { 
     @Override 
     public T read(JsonReader reader) throws IOException { 
     return adapter.read(reader); 
     } 

     @Override 
     public void write(JsonWriter writer, T value) throws IOException { 
     JsonElement tree = adapter.toJsonTree(value); 

     if (value instanceof MyInterface) { 
      String dom = ((MyInterface) value).buildDomClass(); 
      JsonObject jo = (JsonObject) tree; 
      jo.addProperty("dom", dom); 
     } 

     gson.getAdapter(JsonElement.class).write(writer, tree); 
     } 
    }; 
    } 
} 

आसान वस्तु आप को क्रमानुसार करना चाहते इंटरफ़ेस को लागू है, तो आप serializing प्रतिनिधि, और तो आप डोम धारण करने वाली एक अतिरिक्त संपत्ति जोड़ते हैं।

मामले में आप नहीं जानते हैं, तो आप एक बहुत इस

Gson gson = new GsonBuilder().registerTypeAdapterFactory(new MyAdapter()).create(); 
+0

महान उत्तर की तरह एक कारखाने रजिस्टर, धन्यवाद! –