我的服务器返回一个像这样的json对象:
{
"sw": {
"latitude": 12.283139573692,
"longitude": 76.623518155689
},
"ne": {
"latitude": 12.30112600581,
"longitude": 76.651167163598
}
}
我的Gson课程是
import com.google.android.gms.maps.model.LatLng;
/**
* Created by Moz on 12/10/15.
*/
public class Box {
LatLng ne;
LatLng sw;
public LatLng getNorthEast() {
return ne;
}
public LatLng getSouthWest() {
return sw;
}
}
在这种情况下它可以正常工作,因为com.google.android.gms.maps.model
下的LatLng类使用名称作为纬度,经度。但是,我宁愿让我的服务器响应为lat,lng,因为它在发送大量latlng对象时节省了空间。这里的问题是,由于这个LatLng对象是Google库的一部分,我无法添加字段映射名称注释。我想继续使用原始谷歌的LatLng类,但同时允许服务器返回较小的响应,即lat,lng。如何实现这一目标?
答案 0 :(得分:5)
您是否尝试编写自己的反序列化程序?你应该尝试这样的事情(未经测试)。
public class LatLngDeserializer implements JsonDeserializer<LatLng> {
@Override
public LatLngdeserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
JsonObject jobject = json.getAsJsonObject();
return new LatLng(
jobject.get("lat").getAsDouble(),
jobject.get("lng").getAsDouble());
}
您必须使用
配置gson以使用此反序列化程序GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LatLng.class, new LatLngDeserializer());
Gson gson = gsonBuilder.create();
现在,您可以使用
解析服务器中的lat / long对象LatLng latlng = gson.fromJson(jsonInput, LatLng.class);
jsonInput
看起来像
{
"lat" : 0.0,
"lng" : 0.0
}
您还可以看到此thread