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
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.
Ek açıklamalar olmadan Seri hale getir...
Gson: Doğrudan JsonObject (POJO)Dize d...
Xmlns=" almadan XML nesne seri hal...
Jackson (JSON) - " ile seri hale g...
Hızlı ve kompakt nesne seri hale getir...