Gson
Gson之@Expose注解
1 | public class User{ |
如果使用new Gson()
实例化一个对象的话,那么@Expose
的注解是无效的,User
中的参数都会参与序列化和反序列化。
如果使用的是
1 | Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() |
对Gson
进行实例化,那么
- 没有被
@Expose
注解的password
不会参与序列化与反序列化。 lastName
不会参与序列化。emailAddress
不会参与序列化与反序列化
Xml
对xml有三种解析方式
DOM解析
先把文档都读取到内存中,然后通过DOM API来访问树结构并获取数据,但是如果XML数据非常大,在处理效率上就会大打折扣了,这是相对于其他处理XML方式而言的。
SAX解析(Simple API for XML)
- 相比于DOM方式,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析,缺点是操作复杂。
- SAX是基于事件驱动的。当然Android的事件机制是基于回调函数的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时就会回调一个事件,在读取到其他节点和内容时也会回调一个事件。
SAX方式是按照一定的顺序进行解析数据的,其顺序主要按照以下的方法一次执行:
startDocument()
当开始解析xml文件的声明的时候就会调用这个方法,可以做一些初始化的工作。
startElement()
当开始解析元素的开始标签的时候,就会调用这个方法。
characters()
当读到文本元素的时候要调用这个方法。
endElement()
当读到结束标签的时候就会调用这个方法。
PULL解析
在Android体系中,很多资料文件中,很多是xml格局,在android体系中解析这些xml的格式,是应用PULL解析器进行解析的,它和SAX解析一样,也是采取事务驱动进行解析的。
由于PULL解析方式与SAX解析方式相似,都是采用事务驱动进行解析的,只不过PULL方式读xml回调方法返回的是数字。
PULL解析中的事件为:
- 开始文档
START_DOCUMENT
- 结束文档
END_DOCUMENT
- 开始元素
START_TAG
- 结束元素
END_TAG
遇到元素内容
TEXT
等需要调用next()
方法提取它们- 开始文档
数据解析问题
Gson解析,字段比bean多或少。导致json字符串解析不出来内容的问题
此方法需要json数据和bean属性一一对应
1 | JsonObject bsqJson = new JsonParser().parse(commonModel.getJsonData().toString()).getAsJsonObject(); |
此方法不需json数据和bean属性一一对应
1 | List<BsqBaseInfoModel> result=new Gson().fromJson(commonModel.getJsonData().toString(), new TypeToken<List<BsqBaseInfoModel>>(){}.getType()); |
包:
1 | import com.google.gson.Gson; |
转json字符串出现"$ref"
的问题
问题:对象转json字符串,断点取到json字符串中带"$ref"
等字样,不是实际的值的问题。(有出现debug正常,release异常的情况)
解决:升级了fastjson版本导致的,使用Gson解析方式。
1 | Gson gson = new Gson(); |