Gson IllegalStateException - PullRequest
       6

Gson IllegalStateException

0 голосов
/ 20 ноября 2010

Я новичок, когда дело касается в основном всех форм хранения, кроме SharedPreferences и некоторого SQLite.Я провел некоторый поиск и обнаружил, что JSON + GSON - это быстрый способ разбора объектов и их полей в хранимые строки.

Итак, в моей игре у меня есть объект Player, у которого есть поля, которые также являются моими.собственные классы:

public class Player {
    private int something_game_related = 1;
    private Skill equipped_skill;
    private Item equipped_weapon;

    public Player () {}
}

Я подозреваю, что эти классы являются проблемой, потому что, когда я пытаюсь запустить простой метод сохранения:

private class ItemSerializer implements JsonSerializer<Item> {
    public JsonElement serialize( Item src, Type typeOfSrc, JsonSerializationContext context ) {
        return new JsonPrimitive(src.toString());
    }
}
private class SkillSerializer implements JsonSerializer<Skill> {
    public JsonElement serialize( Skill src, Type typeOfSrc, JsonSerializationContext context ) {
        return new JsonPrimitive(src.toString());
    }
}

public void doSave() {
    GsonBuilder gson = new GsonBuilder();
    //Both custom classes have zero-arg constructors so we don't need to register those
    gson.registerTypeAdapter( Item.class, new ItemSerializer() );
    gson.registerTypeAdapter( Skill.class, new SkillSerializer() );
    Gson g = gson.create();
    String mPlayer = "";
    Type player = new TypeToken<Player>(){}.getType();
    try{
        mPlayer = g.toJson( GameView.mPlayer, player );   
    }
 catch (Exception e) {e.printStackTrace();}
 }

, я получаю это исключение: java.lang.IllegalStateException: How can the type variable not be present in the class declaration!

Мой вопрос ..

Как мне заставить работать эти пользовательские сериализаторы?Как я уже сказал, я нуб .. но это выглядит как будто я все сделал правильно ..

1 Ответ

0 голосов
/ 11 февраля 2011

В документах сказано (вроде мелким шрифтом), что статические поля исключены: http://sites.google.com/site/gson/gson-user-guide#TOC-Excluding-Fields-From-Serialization

Вы можете сделать что-то вроде «excludeFieldsWithModifier (Modifier.STATIC)» в конструкторе GSON, чтобы включить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...