最近项目中需要在android中将对象转为json字串以及反序列化为对象,查阅了android sdk文档后,发现android中没有类似C#里DataContractJsonSerializer的类,想想需求也不算复杂,就自己写了两个方法解决,代码如下:

public staticStringgetJson(ObjectobjSource){
try{
Objectobject=getJsonObject(objSource);
if(object== null)
return"";
return((JSONObject)object).toString();
} catch(Exceptionerr){
Log.e(TAG,"getJsonexception:"+err.getMessage());
return"";
}
}

private staticObjectgetJsonObject(ObjectobjSource) throwsException{
if(objSource!= null){
Class<?>objClass=objSource.getClass();
if(objClass.getPackage().getName().startsWith(PackageString)){
JSONObjectjsonObject= newJSONObject();
Field[]publicFields=objClass.getFields();
Objectval;
for(Fieldfield:publicFields){
val=field.get(objSource);
if(val!= null){
Class<?>valClass=val.getClass();
if(valClass.isArray()){
JSONArrayarray= newJSONArray();
intlength=Array.getLength(val);
for( inti=0;i<length;i++){
array.put(getJsonObject(Array.get(val,i)));
}
jsonObject.put(field.getName(),array);
} else if(valClass.equals(ArrayList. class)){
ArrayList<?>aList=ArrayList. class.cast(val);
Iterator<?>iterator=aList.iterator();
JSONArrayarray= newJSONArray();
while(iterator.hasNext()){
array.put(getJsonObject(iterator.next()));
}
jsonObject.put(field.getName(),array);
} else{
jsonObject.put(field.getName(),getJsonObject(val));
}
} else{
jsonObject.put(field.getName(), null);
}
}
returnjsonObject;
} else{
returnobjSource;
}
}
return null;
}


public staticObjectparseJson(Class<?>targetClass,StringjsonString){
try{
Objectobject=targetClass.newInstance();
JSONObjectjsonObject= newJSONObject(jsonString);
Stringkey;
Class<?>fieldClass;
Objectelement;
Class<?>elementType;
Field[]fields=targetClass.getFields();

for(Fieldfield:fields){

key=field.getName();
fieldClass=field.getType();
if(fieldClass.equals(ArrayList. class)){
StringgenericType=field.getGenericType().toString();
if(genericType.indexOf("<")>0){
genericType=genericType.substring(genericType.indexOf("<")+1,genericType.lastIndexOf(">"));
}
ArrayList<Object>aList= newArrayList<Object>();
JSONArrayarray=jsonObject.getJSONArray(key);
intlength=array.length();
if(genericType.startsWith(PackageString)){
elementType=Class.forName(genericType);
Field[]elementFields=elementType.getFields();
JSONObjectsubJsonObject;
for( inti=0;i<length;i++){
element=elementType.newInstance();
subJsonObject=array.getJSONObject(i);
for(FieldsubField:elementFields){
subField.set(element,subJsonObject.get(subField.getName()));
}
aList.add(element);
}
} else{
for( inti=0;i<length;i++){
aList.add(array.get(i));
}
}
field.set(object,aList);

} else if(fieldClass.isArray()){
JSONArrayarray=jsonObject.getJSONArray(key);
intlength=array.length();
StringarrayTypeName=fieldClass.getComponentType().getName();
Object[]objArray= newObject[length];

if(arrayTypeName.startsWith(PackageString)){
elementType=Class.forName(arrayTypeName);
Field[]elementFields=elementType.getFields();
JSONObjectsubJsonObject;
for( inti=0;i<length;i++){
element=elementType.newInstance();
subJsonObject=array.getJSONObject(i);
for(FieldsubField:elementFields){
subField.set(element,subJsonObject.get(subField.getName()));
}
objArray[i]=element;
}
} else{
for( inti=0;i<length;i++){
objArray[i]=array.get(i);
}
}
field.set(object,objArray);

} else{
field.set(object,jsonObject.get(key));
}
}
returnobject;
} catch(Exceptionerr){
Log.e(TAG,"parseJsonexception:"+err.getMessage());
return null;
}
}

支持基本类型、数组、ArrayList成员组成的类

更多相关文章

  1. android ListView 示例1 entries 指定一个数组资源
  2. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜
  3. Android高手进阶教程(十七)之---Android中Intent传递对象的两种
  4. Android中将资源文件转为Bitmap对象
  5. 面向UDP的Android——PC双向通信(三):在Android客户端和PC服务器端
  6. Android调用WebService系列之KSoap2对象解析
  7. Android Application对象必须掌握的七点
  8. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入S
  9. Android判断网络状态是否断开+Android完全关闭应用程序+ 本文讲

随机推荐

  1. android:gravity与android:layout_gravit
  2. android UI 配置参数
  3. 初学Android学到的关于LinearLayout的知
  4. [转]Jollen 的 Android(安卓)教學,#11: And
  5. 【Android】让Python在Android系统上飞一
  6. Pro Android(安卓)4 第五章 理解Intent
  7. Android基础控件使用指南
  8. Android事件分发/传递机制总结
  9. 讲给Android程序员看的前端教程(18)——
  10. 【Android(安卓)Studio使用教程1】Androi