2

Android アプリで JSON 文字列を逆シリアル化するために GSON を使用しています。私の問題は、期待されるオブジェクトを取得しないことですが、 LinkedTreeMap オブジェクトを取得すると、例外が発生します。

java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap を sis.hierrein.android.DDL.Core.Uniqueidentifier にキャストできません

私のクラス:

public class Uniqueidentifier {
    public String OID;
}

public class Element extends Uniqueidentifier {
    (...)
}

逆シリアル化を実装するメソッド:

public void Set(String data) throws Exception {
    HashSet<T> objList = loadObject(data);

    if(objList == null) {
        throw new Exception("Es wurden keine Daten übergeben.");
    }

    for(T obj: objList) {
        // Trying to iterate over each element causes the exception
    }
}

// T is in this example Element
protected HashSet<T> loadObject(String data)  {
    Gson parser = new Gson();
    HashSet<T> obj;

    Type t = new TypeToken<HashSet<T>>(){}.getType();

    try {
        obj = parser.fromJson(data, t);
    }
    catch(Exception e) {
        return null;
    }

    return obj;
}

クラス

public class Handler<T extends Uniqueidentifier> {  
    (...)
}

このメソッドを含む、のスーパークラスとして使用されます

public class ElementHandler extends Handler<Element> {
    (...)
}

ElementHandler 自体にはコンストラクタしか含まれていないため、スーパークラスのメソッドが呼び出されます。背景: これらのクラスはすべてインスタンス化され、メソッドはリフレクションを介して呼び出されます。

4

0 に答える 0