gpt4 book ai didi

java - FlexJSON 没有完全序列化类对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:56 40 4
gpt4 key购买 nike

我是 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)

最佳答案

Flexjson 脱离了 Java Beans,而 PObject 不遵循 Java Bean 规范。您需要为您的属性添加 getter:姓名、年龄和国家/地区,或者您需要将这些字段标记为公开。任何一个都会起作用。如果您计划使用 JSONDeserializer 反序列化您的对象,请添加 setter 。

关于java - FlexJSON 没有完全序列化类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887770/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com