Gson deserializes with empty fields

二次信任 提交于 2020-11-29 08:54:31

问题


The result variable contains corrected parsed JSON. But after deserialization List contains correct amount of items but all of them are empty. How to fix it?

Gson gson = new Gson();
List<UnitView> unitViews = new ArrayList<UnitView>();
// https://stackoverflow.com/questions/5554217/google-gson-deserialize-listclass-object-generic-type
Type typeToken = new TypeToken<List<UnitView>>() { }.getType();
unitViews = gson.fromJson(result,typeToken); 

Even if I do like

UnitView[] unitViews = gson.fromJson(result, UnitView[].class);

The fields of items are empty as well.

UnitView

public class UnitView implements Serializable {

    public String id ;

    public String name ;

    public String description ;

    public String deviceTypeName ;


    public String categoryID ;

    public String lastOnline ;

    public String latitude ;

    public String longitude ;

    public String atTime ;

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    public String getDeviceTypeName() {
        return deviceTypeName;
    }

    public String getCategoryID() {
        return categoryID;
    }

    public String getLastOnline() {
        return lastOnline;
    }

    public String getLatitude() {
        return latitude;
    }

    public String getLongitude() {
        return longitude;
    }

    public String getAtTime() {
        return atTime;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setDeviceTypeName(String deviceTypeName) {
        this.deviceTypeName = deviceTypeName;
    }

    public void setCategoryID(String categoryID) {
        this.categoryID = categoryID;
    }

    public void setLastOnline(String lastOnline) {
        this.lastOnline = lastOnline;
    }

    public void setLatitude(String latitude) {
        this.latitude = latitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public void setAtTime(String atTime) {
        this.atTime = atTime;
    }
}

JSON DATA

[{"ID":"294","Name":"Foton Tunland  № F110","Description":null,"DeviceTypeName":"Техника ТО","CategoryID":"18","LastOnline":"19.12.2017 20:38:04","Latitude":"11,40119","Longitude":"11,42403","AtTime":"19.12.2017 20:38:04"},{"ID":"295","Name":"DML LP1200  № 9793","Description":null,"DeviceTypeName":"Буровой станок дизельный","CategoryID":"15","LastOnline":null,"Latitude":null,"Longitude":null,"AtTime":null}]

回答1:


Ok , the problem is that the parser is case-sensitive, you can change the name of your attributes to match the name of the json value of you could use the SerializedName annotation like this:

@SerializedName("ID")
public String id ;
@SerializedName("Name")
    public String name ;
@SerializedName("Description")
    public String description;
...

or

    public String ID ;
    public String Name ;
    public String Description ;
...



回答2:


I think you're having this problem because of null values in your json. Check it. Source



来源:https://stackoverflow.com/questions/47898640/gson-deserializes-with-empty-fields

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!