2017-04-05 39 views
0

對象的Android項目,我創建從一個XSD文件中提取類,看起來像這樣GSON JSON與定製FieldNamingPolicy

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "LoginUserResponse1Document", propOrder = { 
    "lgnUsrRspn" 
}) 
public class LoginUserResponse1Document { 

    @XmlElement(name = "LgnUsrRspn", required = true) 
    protected LoginUserResponseV01 lgnUsrRspn; 

    /** 
    * Gets the value of the lgnUsrRspn property. 
    * 
    * @return 
    *  possible object is 
    *  {@link LoginUserResponseV01 } 
    *  
    */ 
    public LoginUserResponseV01 getLgnUsrRspn() { 
     return lgnUsrRspn; 
    } 

    /** 
    * Sets the value of the lgnUsrRspn property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link LoginUserResponseV01 } 
    *  
    */ 
    public void setLgnUsrRspn(LoginUserResponseV01 value) { 
     this.lgnUsrRspn = value; 
    } 
} 

的API IM與工作使用中出現的@XmlElement(name = "LgnUsrRspn", required = true)例如在名稱請求之一,我得到JSON的響應,看起來像這樣:

{ 
    "LgnUsrRspn": { 
    "Hdr": { 
     "XchgId": "7403AC2E976D46968F6B4839E2FCB7A6", 
     "DtTm": "2017-04-05T09:20:47.593+0000", 
     "NxtFlow": "LOG" 
    }, 
    "LgnUsr": { 
     "Rslt": { 
     "RsltStts": "DECL", 
     "RsltRsn": "" 
     } 
    } 
    } 
} 

我也有這個類來處理JSON轉換

public class JsonBuilder { 

    private JsonBuilder(){ 
    } 

    public static String toJson(Object pojo){ 
     GsonBuilder gsonBuilder = new GsonBuilder(); 
     gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE); 
     Gson gson = gsonBuilder.create(); 
     return gson.toJson(pojo); 
    } 

    public static Object fromJson(String json, Class type){ 
     GsonBuilder gsonBuilder = new GsonBuilder(); 
     gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE); 
     Gson gson = gsonBuilder.create(); 
     return gson.fromJson(json, type); 
    } 
} 

我的問題是,如果有一種方法,我可以創建自定義FieldNamingPolicy與GsonBuilder使用,或一種方法,我可以用我在@XmlElement(name = "LgnUsrRspn", required = true)

+0

爲什麼不能用GSON的'@SerializedName(「LgnUsrRspn」)''等其他註釋來標註字段? –

回答

2

您可以使用setFieldNamingStrategy(),可以讓你通過你的自己實現FieldNamingStrategy

例如,

public class XsdAnnotation implements FieldNamingStrategy { 

    @Override 
    public String translateName(Field field) { 
     XmlElement fieldNamingPolicy = field.getAnnotation(XmlElement.class); 
     return fieldNamingPolicy.name(); 
    } 
} 

但我會建議與@SerializedName使用它。

+0

@Ric你檢查了我的答案嗎? – Krish

+0

是的,對不起,我出去吃午餐感謝您的幫助 – Ric