我是FlexJson的新手,我跟随http://flexjson.sourceforge.net/学习简单的教程。
我编写了一个简单的程序,但它似乎没有序列化对象属性。如果有人知道这件事,请帮帮我
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);
}
}输出:
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)(从删除的答案中更新):
我尝试使用getter/setter方法修改代码,现在它失败了,说明如下。如果我做错了,我很抱歉,我是新来的。
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);
}
}输出:
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)发布于 2010-10-08 04:59:15
Flexjson不支持Java,PObject不遵循Java规范。您需要为属性添加getter:名称、年龄和国家,或者需要将这些字段标记为public。两种都能用。如果计划使用JSONDeserializer反序列化对象,则添加setter。
发布于 2016-04-19 12:05:52
如果使用Spring 3或更高版本,则必须删除以下条目
map.remove("org.springframework.validation.BindingResult.string");
在序列化之前从模型映射。就像一种魅力。最好在实现视图的视图组件中这样做。请看下面的代码。
public class JsonView implements View{
@Override
public String getContentType() {
return "application/json";
}
@Override
public void render(Map<String, ?> map, HttpServletRequest hsr, HttpServletResponse response) throws Exception {
map.remove("org.springframework.validation.BindingResult.string");
final String data = new JSONSerializer().deepSerialize(map);
response.getWriter().write(data);
}}
https://stackoverflow.com/questions/3887770
复制相似问题