Soy nuevo en FlexJson y estaba siguiendo http://flexjson.sourceforge.net/ para un tutorial simple.
Escribí un programa simple pero parece que no está serializando los atributos del objeto. Por favor, ayúdame si alguien sabe de estoFlexJSON no serializa completamente objetos de clase
package com.webapp.enter;
import flexjson.JSONSerializer;
class PObject {
String name;
int age;
String country;
public PObject (String n, int a , String c){
this.name = n;
this.country = c;
this.age = a;
}
public String toString(){
return this.name + this.age + this.country;
}
public String[] getData(){
return new String[]{ this.name, this.country};
}
}
public class Person{
public static void main(String main[]){
PObject person = new PObject("harit",23,"india");
System.out.println(person.name + " - " + person.age + " - " + person.country);
JSONSerializer serializer = new JSONSerializer();
String out = serializer.serialize(person);
System.out.println("S : " + out);
}
}
Salida:
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
compile-single:
run-main:
harit - 23 - india
S : {"class":"com.webapp.enter.PObject"}
BUILD SUCCESSFUL (total time: 0 seconds)
(Actualización de la respuesta suprimido):
Me trataron de modificar el código usando métodos de captador/definidor, ahora falla diciendo lo siguiente. Me disculpo si lo estoy haciendo mal, yo soy nuevo en este
package com.webapp.enter;
import flexjson.JSONSerializer;
class PObject {
String name;
int age;
String country;
public PObject(){
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setCountry(String country){
this.country = country;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public String getCountry(){
return this.country;
}
}
public class Person{
public static void main(String main[]){
PObject person = new PObject();
person.setAge(23);
person.setCountry("usa");
person.setName("test");
System.out.println(person.name + " - " + person.age + " - " + person.country);
JSONSerializer serializer = new JSONSerializer();
String out = serializer.serialize(person);
System.out.println("S : " + out);
}
}
Salida:
test - 23 - usa
Exception in thread "main" flexjson.JSONException: Error trying to deepSerialize
at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:97)
at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22)
at flexjson.JSONContext.transform(JSONContext.java:75)
at flexjson.JSONSerializer.serialize(JSONSerializer.java:378)
at flexjson.JSONSerializer.deepSerialize(JSONSerializer.java:301)
at com.webapp.enter.Person.main(Person.java:60)
Caused by: java.lang.IllegalAccessException: Class flexjson.transformer.ObjectTransformer can not access a member of class com.webapp.enter.PObject with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95)
at java.lang.reflect.Method.invoke(Method.java:607)
at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:45)
... 5 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
Hola, chubbsondubs, tenía un problem.Does similares que afectan a si su getter y setters son privadas o de su constructor es privado? – faizan
También puede dar un buen enlace para la especificación de Java Bean. Gracias de antemano. – faizan
Puede marcar el getter/setter ya sea privado o protegido y Flexjson lo recogerá. Lo mismo vale para el constructor. – chubbsondubs