2016-04-11 19 views
0

aşağıda olarak temsil edilen bir json dizesi var çalışmıyor:kullanma GSON fromJson yöntemi

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

Ben de GSON kütüphane fromJson() yöntemini kullanarak oluşturmak istiyor bunun altında bir sınıf nesnesi var ... Ben gson.fromJson yöntemini çağırdığınızda

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

Şimdi hata yok ama benim nesne set almıyor. Bunun yerine açıkça yanlıştır ama hiçbir hata atılır bazı garip GSON nesnesine benim 'ar' değişkeni kuruyor

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

Bu ... Ben kullanıyorum kodudur.

{serializeNulls: falsefactories: [Fabrika [typeHierarchy = com.google.gson.JsonElement, adaptör = com.google.gson.internal.bind.TypeAdapters 25 $,] e8dad0a @

Neyden Gördüğüm gibi, Json dizgimde bir hata yok (json için yeni olmama rağmen), bu yüzden bu yöntemin neden çalışmadığından emin değilim ...

+0

Bu çıkışı nereden alıyorsunuz? Ne üretir? – Savior

+1

Bir MCVE gönderebilir misiniz? –

+0

Bu hata iletisini içeren istisna nedir? Stacktrace'i gönderin lütfen. – f1sh

cevap

1

Muhtemelen gson nesnesini yazdırdınız @Pillar yorumlarda belirtildiği gibi, ar nesnesinin.

Örneğini denedim ve beklendiği gibi çalışıyor. Ayrıca, özelliğin adı eşleşmediğinden Id alanı ayarlanmıyor. @SerializedName kullanmalı veya isimlerden birini değiştirmelisiniz. Bu da yorumlarda belirtilmiştir.

Bu

çalışma örneğidir:

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 + 
       '}'; 
    } 
    } 
} 

Ve bu yürütme çıkışı:

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

Burada uygun eylem, onaylanamayan olarak kapatmak için bayrak/bayrak etmektir. – Savior

0

olarak sadece Kimliği sınıf AccessRequest gelen RequestID değiştirmeniz gerekir. doğru çıktı alacaksınız.