Gson 的日常使用
创建一个 Peson对象
public class Person{ private String name; //属性都定义成String类型,并且属性名要和Json数据中的键值对的键名完全一样 private String age; ...//提供所有属性的getter和setter方法 }
1.将对象转换为字符串
Person p=new Person("张丽丽",18); Gson gson=new Gson(); String json=gson.toJson(p); Log.i(TAG, json);
输出结果为: {"name": 张丽丽","age":18}
1.2.对象数组转换为String 字符串
ArrayList<Person> p=new ArrayList<Person>(); p.add(new Person("张三",18)); p.add(new Person("里斯",23)); Gson gson=new Gson(); String json=gson.toJson(p); Log.i(TAG, json);
输出结果为:[ {"name": 张三","age":18},{"name": 里斯","age":18}]
2.Gson的反序列化,将字符串转换为Json对象
jsonstr= {"name":"jack","age":18}
Gson gson = new Gson;
Person person = gson.formJson(jsonstr,Person.class)
2.1 将字符串数组转化为Json 对象
jsonstr= [{"name":"jack","age":18},{"name":"alex","age":23},{"name":"jane","age":15}]
Gson gson=new Gson();
Person[] person1=gson.fromJson(jsonstr, Person[].class);
3.集合类就必须要用TypeToken。它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。
Set<Long> idSet = StaticVariables.gson.fromJson(user.getDocpermission(), new TypeToken<Set<Long>>() { }.getType()); ArrayList<Person> person2=gson.fromJson(jsonstr, new TypeToken<ArrayList<Person>>(){}.getType());
4.
还要说一下如果对象的某个值为null。这个属性将不会在String中显示。
ArrayList<Person> p=new ArrayList<Person>();
p.add(new Person("jack",18));
p.add(new Person(null,23));
p.add(new Person("jane",15));
Gson gson=new Gson();
String json=gson.toJson(p);
Log.i(TAG, json);
输出结果:[{"name":"jack","age":18},{"age":23},{"name":"jane","age":15}]
如果要被序列化的String缺少某个属性例如上面的输出。也会转换成功。并且对应值为null。
3.Gson序列化的类屏蔽
比如你想将一个类的几个属性序列化,但他继承自一个很复杂的父类。你不想序列化他的父类。
又或者你在反序列化一个类时,因为复杂的父类而序列化失败。
使用这个类。屏蔽父类或属性类成员不应序列化的类。
public class SpecificClassExclusionStrategy implements ExclusionStrategy {
private final Class<?> excludedThisClass;
private final Class<?> excludedThisClassFields;
/***
* 过滤器初始化
*
* @param excludedThisClass
* 该类和继承自该类的对象实例将被忽略
* @param excluedThisClassFields
* 该类的属性将不被序列化
*/
public SpecificClassExclusionStrategy(Class<?> excludedThisClass, Class<?> excluedThisClassFields) {
this.excludedThisClass = excludedThisClass;
this.excludedThisClassFields = excluedThisClassFields;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
if (clazz == null) return false;
if (clazz.equals(excludedThisClass)) return true;
return shouldSkipClass(clazz.getSuperclass());
}
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(excludedThisClassFields);
}
}
Gson gson2 = new GsonBuilder().setExclusionStrategies(new SpecificClassExclusionStrategy(null, Model.class)).create(); PersonBrief.PersonBriefResult result = gson2.fromJson(response, PersonBrief.PersonBriefResult.class);
感觉平时就用到这么多了。
还有一个在对象与JsonObject直接转的。但这个JsonObject不是Android的JSONObject所以很少用。
Person p=new Person("jack",18);
Gson gson=new Gson();
JsonElement jsonele=gson.toJsonTree(p);
JsonObject json=jsonele.getAsJsonObject();


浙公网安备 33010602011771号