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

  • Associated Press

    Associated P

    18 EYLÜL 2006
  • ecf150king

    ecf150king

    20 Ocak 2006
  • EEVblog2

    EEVblog2

    2 HAZİRAN 2014