是否可以获取@XmlElement名称值而不是Object to Json转换的变量名称?

时间:2014-03-13 01:13:47

标签: json gson

所以我有这段代码:

<xs:element name="Headers">
    <xs:annotation>
        <xs:documentation>Headers Object</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>               
            <xs:element name="content-type" type="xs:string" minOccurs="0" />
             </xs:sequence>
    </xs:complexType>
</xs:element>

当我创建类Headers时,我得到了content-type元素:

 @XmlElement(name = "content-type")
 protected String contentType;

我使用Gson将对象转换为json:

"headers": [{           
    "contentType": "application/x-www-form-urlencoded",
 }],

我需要的是获取我在xsd文件中使用的contentType元素,所以我的问题是是否有机会获取@XmlElement名称值并在转换而不是变量名称中使用它。我也尝试了xstream库,但得到了相同的结果。

提前致谢。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。 对于这个,不需要修改xsd来添加@SerializedName(&#34; content-type&#34;),如果xsd非常大,这也不是时间。

PS:我正在使用Gson API。

GsonBuilder gson = new GsonBuilder();
gson.setFieldNamingStrategy(new CustomFieldNamePolicy());

CustomFieldNamePolicy类可以定义为:

public class CustomFieldNamePolicy implements FieldNamingStrategy{

    @Override
    public String translateName(Field paramField) {

        Annotation annotationName = null;

        if(null != (annotationName = paramField.getAnnotation(XmlElement.class))){
            return ((XmlElement) annotationName).name();
        }else if(null != (annotationName = paramField.getAnnotation(XmlAttribute.class))){
            return ((XmlAttribute)annotationName).name();
        }
        return paramField.getName();
    }
}