2016-04-11 5 views
0

が、私は以下のように表されるJSON文字列持って働いていません。使用Gson fromJson方法は

"{"RequestId":255, 
    "RequestTime":"2016-04-08T17:00:40.327", 
    "Otp":"123456", 
    "AppName":"This is my app name", 
    "IsAwaitingResponse":false}" 

は、私も、私はGsonライブラリfromJson()メソッドを使用して作成したいという以下のクラスオブジェクトを持っているが...

public class AccessRequest{ 
    public int Id; 
    public String RequestTime; 
    public String Otp; 
    public String AppName; 
    public Boolean IsAwaitingResponse; 
} 

私がgson.fromJsonメソッドを呼び出すと、エラーは発生しませんが、オブジェクトが設定されていません。これは、私はそれではなく、明らかに間違っているが、エラーがスローされないいくつかの奇妙なgsonオブジェクトに私の「AR」変数を設定している...

Gson gson = new Gson(); 
AccessRequest ar; 
ar = gson.fromJson(jsonString, AccessRequest.class); 

を使用しているコードです。

{serializeNulls:falsefactories:e8dad0a @ [ファクトリー[typeHierarchy = com.google.gson.JsonElement、アダプタ= com.google.gson.internal.bind.TypeAdapters $ 25]、

何から私は、私のJson文字列にエラーはありません(私はjsonに新しいです)ので、私は本当にこのメソッドが動作しない理由は本当にわからない...

+0

出力はどこにありますか?それを生成するものは何ですか? – Savior

+1

MCVEを投稿できますか? –

+0

そのエラーメッセージを含む例外は何ですか? stacktraceを投稿してください。 – f1sh

答えて

1

おそらくgsonオブジェクトを印刷しましたコメントの中で@Pillarが指摘したように、arオブジェクトの。

私はあなたの例を試して、期待どおりに動作します。また、プロパティの名前が一致しないため、Idフィールドが設定されていません。 @SerializedNameを使用するか、名前を変更する必要があります。これはコメントにも記載されています。

package net.sargue.gson; 

import com.google.gson.Gson; 
import org.intellij.lang.annotations.Language; 

public class SO36553536 { 
    public static void main(String[] args) { 
    @Language("JSON") 
    String json = "{\n" + 
      " \"RequestId\": 255,\n" + 
      " \"RequestTime\": \"2016-04-08T17:00:40.327\",\n" + 
      " \"Otp\": \"123456\",\n" + 
      " \"AppName\": \"This is my app name\",\n" + 
      " \"IsAwaitingResponse\": false\n" + 
      "}"; 

    Gson gson = new Gson(); 
    AccessRequest ar; 
    ar = gson.fromJson(json, AccessRequest.class); 
    System.out.println("ar.getClass() = " + ar.getClass()); 
    System.out.println("ar = " + ar); 
    } 

    public class AccessRequest { 
    public int Id; 
    public String RequestTime; 
    public String Otp; 
    public String AppName; 
    public Boolean IsAwaitingResponse; 

    @Override 
    public String toString() { 
     return "AccessRequest{" + "Id=" + Id + 
       ", RequestTime='" + RequestTime + '\'' + 
       ", Otp='" + Otp + '\'' + 
       ", AppName='" + AppName + '\'' + 
       ", IsAwaitingResponse=" + IsAwaitingResponse + 
       '}'; 
    } 
    } 
} 

そして、これは、実行出力されます:

ar.getClass() = class net.sargue.gson.SO36553536$AccessRequest 
ar = AccessRequest{Id=0 
, RequestTime='2016-04-08T17:00:40.327' 
, Otp='123456' 
, AppName='This is my app name' 
, IsAwaitingResponse=false} 
+0

ここで適切なアクションは、投票できないようにすることです。 – Savior

0

だけIDクラスアクセス要求からRequestIdを変更する必要があるとして

これは実施例です。 正しい出力が得られます。

関連する問題