2015-03-15 11 views
8

मुझे जीसन का उपयोग करके एनम वैल्यू आउटपुट करने की आवश्यकता है जो ग्राहक सीमाओं के कारण कम मामले में होना चाहिए।लोअर केस एनम जीसन

उदाहरण के लिए CLOSE_FILEclose_file होगा।

क्या ऐसा करने का कोई आसान तरीका है? मैंने एक कक्षा बनाने की कोशिश की है जो JsonSerializer लागू करता है लेकिन ऐसा लगता है कि मुझे पूरी कक्षा को मैन्युअल रूप से क्रमबद्ध करना होगा (जो काफी जटिल है) क्या यह मामला है?

उत्तर

14

यदि आपके पास enum प्रकार पर नियंत्रण है, तो अपने सदस्यों को @SerializedName पर एनोटेट करें और इसे उचित क्रमबद्ध मान दें। उदाहरण के लिए,

enum Action { 
    @SerializedName("close_file") 
    CLOSE_FILE; 
} 

आप enum पर नियंत्रण नहीं है, तो, एक कस्टम TypeAdapter जब एक Gson उदाहरण बनाकर प्रदान करते हैं। उदाहरण के लिए,

Gson gson = new GsonBuilder().registerTypeAdapter(Action.class, new TypeAdapter<Action>() { 

    @Override 
    public void write(JsonWriter out, Action value) throws IOException { 
     out.value(value.name().toLowerCase()); 
    } 

    @Override 
    public Action read(JsonReader in) throws IOException { 
     return Action.valueOf(in.nextString().toUpperCase()); 
    } 
}).create(); 
संबंधित मुद्दे