Javaのオブジェクト内のジェネリックオブジェクトを逆シリアル化します

user7415138

Jsonとして送信されるクラスを表すWebApiReturnというクラスがあります。

 public class WebApiReturn<T> {
    @SerializedName("objectReturn")
    public T ObjectReturn;
    @SerializedName("hasError")
    public boolean HasError;
    @SerializedName("errorMessage")
    public String ErrorMessage;
    @SerializedName("errorCode")
    public String ErrorCode;
}

それに加えて、Webサービスから取得しようとしている表現クラスがあります。

public class MyObject {
    public int ID_Obj;
    public String ObjectName;
    public Date LastLoginDate;
}

そして、私のWebServiceによって送信されたJsonとしてフォーマットされた文字列を取得し、それをこのJavaクラスに変換するgetObjectという関数:

public Object getObject(Class wantedResponseClass) throws JSONException{
        Gson gson = new Gson();
        object = gson.fromJson(this.result, wantedResponseClass);

        return object;
    }

そして、私のJsonStringは次のようになります。

{"objectReturn":{"iD_Obj":123,"objectName":"TestName","lastLoginDate":"0001-01-01T00:00:00"},"hasError":false,"errorMessage":null,"errorCode":null}

私のコードでは、次のようにオブジェクトを取得しようとしています。

WebApiReturn<MyObject> responseFromServer = new WebApiReturn<>();
try {
     responseFromServer =(WebApiReturn<MyObject>) getObject(responseFromServer.getClass());
     } catch (Exception e) {
          e.printStackTrace();
     }

しかし、宣言したときにMyObjectに変換される必要がある汎用T WebApiReturn<MyObject> responseFromServer = new WebApiReturn<>();ObjectReturnは、Jsonからの表現で満たされていません。誰かが私が今何を間違っているのか知っていますか?別のタイプの逆シリアル化などを使用する必要がありますか?

user7415138

デシリアライザーにジェネリッククラスを含むクラスを作成するには、AsyncTaskを拡張するTのインスタンスを使用してクラスを作成し(UIスレッドの非同期サーバーからJsonを取得するため)、JSONObject AND GsonLibraryを使用してクラスを2つに分割しましたパーツ:クラス自体と内部のジェネリック。次に、2つの要素として戻ります。

これが私のクラスです:

public class RestClient<t>  extends AsyncTask<String, String, String> {

private Class<t> tClass;

private t returnGenericObject;
private WebApiReturn webApiReturn;

private AsyncCallback callback;

public RestClient(Class<t> tClass)
{
    //The instance of the class you want
    this.tClass = tClass;
    webApiReturn= new WebApiReturn();
}

//You get the WebApiReturn with this method
public WebApiReturn getWebApiReturn(){
    return webApiReturn;
}

//You get the inside generic object with this method
public Object getObjectResponse(){
    return returnGenericObject;
}


@Override
protected String doInBackground(String... OnlyTheURL) {
    String urlString = OnlyTheURL[0];
    try {
        URL url = new URL(urlString);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        connection.connect();

        String result = convertStreamToString(connection.getInputStream()); //A function to convert Stream to String...

        connection.disconnect();

        //Created a JSONObject from the result of the connection
        JSONObject jsonObject = new JSONObject(result);

        //Don't set the Generic Object because it will crash when you try to get back
        webApiReturn.setHasError(jsonObject.getBoolean("hasError"));
        webApiReturn.setErrorMessage (jsonObject.getString("errorMessage"));
        webApiReturn.setErrorCode(jsonObject.getString("errorCode"));

        //Get the String of the generic object within the WebApiReturn
        String obj = jsonObject.get("objetoRetorno").toString();
        //With Gson convert it to the class you expect (that you instanciated in the constructor)
        Gson gson = new Gson();
        ObjetoDeRetorno = gson.fromJson(obj, tClass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

そして、あなたがそれを呼びたいところ、あなたはちょうどこのようにします:

RestClient<YourObject> restClient = new RestClient<>(YourObject.class);
restClient.execute();
Thread.sleep(5000); //You can do this other better ways, but just as example I'm doing this...

//After the execution you get your objects:
WebApiReturn return = getWebApiReturn();
YourObject object = (YourObject) restClient.getObjectResponse();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ジェネリックオブジェクトを含むジェネリックオブジェクトを逆シリアル化します

分類Dev

別のオブジェクトを含むjsonオブジェクトを逆シリアル化します

分類Dev

jsonをジェネリック型のベースオブジェクトに逆シリアル化する

分類Dev

jsonオブジェクト内のカスタムオブジェクトをシリアル化します

分類Dev

オブジェクトのArraylistを逆シリアル化します

分類Dev

Gsonを使用して、別のオブジェクト内のオブジェクトの配列を逆シリアル化します

分類Dev

ルート内の数値オブジェクトを使用してJSONを逆シリアル化します

分類Dev

Spring + Jackson +ジェネリックオブジェクトのリストの逆シリアル化

分類Dev

オブジェクトのリストを含むオブジェクトをシリアル化します

分類Dev

json(javascriptオブジェクト)をc#オブジェクトに逆シリアル化します

分類Dev

JSONを既存のオブジェクトに逆シリアル化する(Java)

分類Dev

ジェネリックオブジェクトを文字列にシリアル化/逆シリアル化

分類Dev

配列内にネストされたオブジェクトを逆シリアル化します

分類Dev

オブジェクト内のelasticsearch応答を逆シリアル化します

分類Dev

ジャクソン2.3の逆シリアル化はnullオブジェクトを返します

分類Dev

GSONで逆シリアル化されている親オブジェクトのパラメーターを使用して子オブジェクトをインスタンス化し、ジェネリックを使用しますか?

分類Dev

Dartのビルド値はオブジェクトのリストを逆シリアル化します

分類Dev

ArrayListでのオブジェクトの逆シリアル化

分類Dev

RestTemplateを使用したネストされたオブジェクトのJava Spring逆シリアル化

分類Dev

Qt / C ++ジェネリックオブジェクトをQSettingsにシリアル化します

分類Dev

HTTPClient.ReadAsAsyncの結果をオブジェクトのリストに逆シリアル化します

分類Dev

Spring Bootを使用してJSONを逆シリアル化し、ジェネリックオブジェクトのリストを含むPOJOに

分類Dev

GSONを使用したKotlinジェネリック値オブジェクトのシリアル化

分類Dev

JMSシリアライザーはオブジェクトのArrayCollectionを逆シリアル化します

分類Dev

Javaソケットでarraylistオブジェクトの逆シリアル化に失敗しました

分類Dev

JSON逆シリアル化オブジェクトの破棄

分類Dev

mimekit.MimeMessageオブジェクトの逆シリアル化

分類Dev

JSONオブジェクトの逆シリアル化と操作

分類Dev

オブジェクトの逆シリアル化

Related 関連記事

  1. 1

    ジェネリックオブジェクトを含むジェネリックオブジェクトを逆シリアル化します

  2. 2

    別のオブジェクトを含むjsonオブジェクトを逆シリアル化します

  3. 3

    jsonをジェネリック型のベースオブジェクトに逆シリアル化する

  4. 4

    jsonオブジェクト内のカスタムオブジェクトをシリアル化します

  5. 5

    オブジェクトのArraylistを逆シリアル化します

  6. 6

    Gsonを使用して、別のオブジェクト内のオブジェクトの配列を逆シリアル化します

  7. 7

    ルート内の数値オブジェクトを使用してJSONを逆シリアル化します

  8. 8

    Spring + Jackson +ジェネリックオブジェクトのリストの逆シリアル化

  9. 9

    オブジェクトのリストを含むオブジェクトをシリアル化します

  10. 10

    json(javascriptオブジェクト)をc#オブジェクトに逆シリアル化します

  11. 11

    JSONを既存のオブジェクトに逆シリアル化する(Java)

  12. 12

    ジェネリックオブジェクトを文字列にシリアル化/逆シリアル化

  13. 13

    配列内にネストされたオブジェクトを逆シリアル化します

  14. 14

    オブジェクト内のelasticsearch応答を逆シリアル化します

  15. 15

    ジャクソン2.3の逆シリアル化はnullオブジェクトを返します

  16. 16

    GSONで逆シリアル化されている親オブジェクトのパラメーターを使用して子オブジェクトをインスタンス化し、ジェネリックを使用しますか?

  17. 17

    Dartのビルド値はオブジェクトのリストを逆シリアル化します

  18. 18

    ArrayListでのオブジェクトの逆シリアル化

  19. 19

    RestTemplateを使用したネストされたオブジェクトのJava Spring逆シリアル化

  20. 20

    Qt / C ++ジェネリックオブジェクトをQSettingsにシリアル化します

  21. 21

    HTTPClient.ReadAsAsyncの結果をオブジェクトのリストに逆シリアル化します

  22. 22

    Spring Bootを使用してJSONを逆シリアル化し、ジェネリックオブジェクトのリストを含むPOJOに

  23. 23

    GSONを使用したKotlinジェネリック値オブジェクトのシリアル化

  24. 24

    JMSシリアライザーはオブジェクトのArrayCollectionを逆シリアル化します

  25. 25

    Javaソケットでarraylistオブジェクトの逆シリアル化に失敗しました

  26. 26

    JSON逆シリアル化オブジェクトの破棄

  27. 27

    mimekit.MimeMessageオブジェクトの逆シリアル化

  28. 28

    JSONオブジェクトの逆シリアル化と操作

  29. 29

    オブジェクトの逆シリアル化

ホットタグ

アーカイブ