Сериализировать логическое значение в строку Y или N в GSON - PullRequest
0 голосов
/ 04 июля 2019

Я пробовал этот код для сериализации / десериализации json в gson и наоборот

public class BooleanSerializer implements JsonSerializer<Boolean>, JsonDeserializer<Boolean> {
    @Override
    public JsonElement serialize(Boolean src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src?"Y":"N");
    }

    @Override
    public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return json.toString().equalsIgnoreCase("Y");
    }
}

И использовал этот класс следующим образом

BooleanSerializer booleanSerializer = new BooleanSerializer();
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Boolean.class, booleanSerializer);
        gsonBuilder.registerTypeAdapter(Boolean.class, booleanSerializer);
        Gson gson = gsonBuilder.create();
Event event = gson.fromJson(eventJObj.toString(), Event.class);

Класс модели похож на этот

public class Event implements Parcelable {
    private long eventID;
    private String objective;
    private String typeOfEvent;
    private Boolean isBookmarked;
    private Boolean iAttended;
    private Boolean isFeatured;
}

И формат json выглядит следующим образом

{
"eventID": 25,
"objective": "event",
"typeOfEvent": "conference",
"isBookmarked": "N",
"iAttended": "Y",
"isFeatured": "Y",
}

Когда я пытаюсь преобразовать вышеуказанный json в объект Event, он не смог преобразовать Y в true, он всегда содержит значение false.Кроме того, по какой-то причине необходимо расширить класс parcelable для Event объекта.

Куда я иду не так?

1 Ответ

0 голосов
/ 08 июля 2019

Я нашел ошибку.В deserialize метод в BooeleanSerializer классе был виновник.

public class BooleanSerializer implements JsonSerializer<Boolean>, JsonDeserializer<Boolean> {
    @Override
    public JsonElement serialize(Boolean src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src?"Y":"N");
    }

    @Override
    public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        // return json.toString().equalsIgnoreCase("Y"); // Wrong code
        return "Y".equalsIgnoreCase(json.getAsString()); 
       // json.getAsString() is the right way to get json element value
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...