【问题标题】:Gson mapping Lat/Lng classGson 映射 Lat/Lng 类
【发布时间】:2015-10-12 06:37:17
【问题描述】:

我的服务器返回一个像这样的 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 库的一部分,我无法添加字段映射名称注释。我想继续使用原来的 google 的 LatLng 类,但同时允许服务器返回一个较小的响应,即 lat、lng。如何实现?

【问题讨论】:

    标签: java android google-maps-api-3 gson


    【解决方案1】:

    您是否尝试编写自己的反序列化器?你应该尝试这样的事情(未经测试)。

    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

    【讨论】:

    • 不,我没有。会试试这个,看看它是否能解决我的问题。谢谢
    • 找到了这个here的现成代码。将它与您的 GsonBuilder 代码一起使用,并修改服务器以将 latlngs 作为逗号分隔的 latlng 服务,并且效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多