SORU
28 NİSAN 2011, PERŞEMBE


Gson POJO bir seri hale getiriliyor sorun'ler

Yeni bir Java kodlayıcısı, öğrenebildiğim her şeyi öğrenmek için elimden geleni yapıyorum. Seri hale getirme ihtiyaçlarım için simpleXML kullanarak tasarladığım, ama Json dışında, yeni bir şeyler öğrenmek için denemek istiyorum düşündüm. Bu uzun zamandır geçirdiğim en sinir bozucu 12 saatlik yol var.

Bu deneyin ve test POJO kullanarak Gson 1.7.1 bir ArrayList seri hale getirmek için kullanıyorum kodudur. Genel olarak seri hale getirme için son derece yeni duyuyorum, lütfen cevap çok açık ise nazik olmak unutmayın. Not: bir Dize için Yazarlar "" kodunu basitleştirmek için. s/Okuyucu kaldırıldı

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.google.gson.Gson;

public class TestGsonSerialDeserialList {
    public static void main(String[] args) throws IOException{
        Gson gson = new Gson();

        //Make Serial 
        String s;
        List<TestObject> list = Collections.synchronizedList(new ArrayList<TestObject>() );
        list.add(new TestObject());
        list.add(new TestObject());

        s = gson.toJson(list, ArrayList.class);
        System.out.println(s);

        //Eat Serial
        List<TestObject> list2 = Collections.synchronizedList(gson.fromJson(s, ArrayList.class) );
        System.out.println(list2.get(0) );
        System.out.println(list2.get(1) );
    }
}

Burada aldığım çıktı:

[{"objectID":1,"i1":12345,"name":"abcdefg","s":["a","b","c"]},{"objectID":2,"i1":12345,"name":"abcdefg","s":["a","b","c"]}]
java.lang.Object@5c74c3aa
java.lang.Object@75d9fd51

Acemi gözlerimi bu doğru görünüyor. Sadece, nesnelerin Serisi listesi temel Nesneleri içerir, bu Örneği ben seri değil. Kimseye bir şey olursa, bu işi yapmak için ne yapabilirim lütfen bana açıklayabilir mi?

Teşekkürler.

DÜZENLEME:

Test için düzeltilmiş: ColinD için Teşekkürler

package test;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class TestGsonSerialDeserialList {
    public static void main(String[] args) throws IOException{
        System.out.println("--- Serialize / Deserialize Started ---");
        String fileName = "json\\testList.json";

        Gson gson = new Gson();
        Type listOfTestObject = new TypeToken<List<TestObject>>(){}.getType();

        //Make Serial 
        Writer osWriter = new OutputStreamWriter( new FileOutputStream(fileName));
        List<TestObject> list = Collections.synchronizedList(new ArrayList<TestObject>() );
        list.add(new TestObject());
        list.add(new TestObject());
        list.add(new TestObject());
        list.add(new TestObject());
        gson.toJson(list, osWriter);
        osWriter.close();


        //Eat Serial
        Reader isReader = new InputStreamReader( new FileInputStream((fileName) ) );
        List<TestObject> list2 = Collections.synchronizedList(
            (List<TestObject>)gson.fromJson(isReader, listOfTestObject) 
        );
        isReader.close();
        System.out.println(list2.get(0) );
        System.out.println(list2.get(1) );
        System.out.println(list2.get(2) );
        System.out.println(list2.get(3) );
        System.out.println("--- Serialize / Deserialize Ended ---");
    }
}

çıkış:

--- Serialize / Deserialize Started ---
ID#: 1, i1: 12345, name: abcdefg, s[]: [Ljava.lang.String;@95c083
ID#: 2, i1: 12345, name: abcdefg, s[]: [Ljava.lang.String;@6791d8c1
ID#: 3, i1: 12345, name: abcdefg, s[]: [Ljava.lang.String;@182d9c06
ID#: 4, i1: 12345, name: abcdefg, s[]: [Ljava.lang.String;@5a5e5a50
--- Serialize / Deserialize Ended ---

EDİT2:

Açıkçası neden bilmiyorum, ama basit bir Dize yerine[] ArrayList ile benim Örneği gömülmüş, doğru seri başladı.

--- Serialize / Deserialize Started ---
ID#: 1, i1: 12345, name: abcdefg, s[]: [a, b, c]
ID#: 2, i1: 12345, name: abcdefg, s[]: [a, b, c]
ID#: 3, i1: 12345, name: abcdefg, s[]: [a, b, c]
ID#: 4, i1: 12345, name: abcdefg, s[]: [a, b, c]
--- Serialize / Deserialize Ended ---

CEVAP
28 NİSAN 2011, PERŞEMBE


Kullandığınız List belirli genel tür (veya kullandığınız herhangi bir genel tür) Gson bilgi vermek gerekir. JSON kaldırmada özellikle, bu bilgi için, her dizi elemanı serisini gerektiğini belirlemek mümkün olması gerekiyor.

Type listOfTestObject = new TypeToken<List<TestObject>>(){}.getType();
String s = gson.toJson(list, listOfTestObject);
List<TestObject> list2 = gson.fromJson(s, listOfTestObject);

Bu Gson user guide belgelenmiştir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Dion Coulls

    Dion Coulls

    16 AĞUSTOS 2006
  • ShoSho

    ShoSho

    20 Ocak 2010