Android两个实体关联序列化反序列化,轻量级序列化

来源:互联网 发布:软件开发企业账务处理 编辑:程序博客网 时间:2024/06/15 21:06

一、什么是json

json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过json来进行交换。尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析。

二、JSON 语法规则

JSON 语法是 JavaScript 对象表示语法的子集。
数据在键值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
json一共有两种数据结构,一种是以 (key/value)对形式存在的无序的jsonObject对象,一个对象以“{”(左花括号)开始,“}”(右花括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔,如图




另一种数据格式就是有序的value的集合,这种形式被称为是jsonArray,数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

图片来源博客园

三、json序列化反序列的两种方法

通过第三方jar包json-lib(http://json-lib.sourceforge.net/)


封装代码直接调用

package com.Platforms.enterprise_Service.Service;import java.lang.reflect.Array;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Locale;import java.util.Map;import java.util.Set;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONStringer;import android.util.Log;/** * @author keane *  */public class JSONHelper {private static String TAG = "JSONHelper";/** * 将对象转换成Json字符串 * @param obj * @return json类型字符串 */public static String toJSON(Object obj) {JSONStringer js = new JSONStringer();serialize(js, obj);return js.toString();}/** * 序列化为JSON * @param js json对象 * @param o待需序列化的对象 */private static void serialize(JSONStringer js, Object o) {if (isNull(o)) {try {js.value(null);} catch (JSONException e) {e.printStackTrace();}return;}Class<?> clazz = o.getClass();if (isObject(clazz)) { // 对象serializeObject(js, o);} else if (isArray(clazz)) { // 数组serializeArray(js, o);} else if (isCollection(clazz)) { // 集合Collection<?> collection = (Collection<?>) o;serializeCollect(js, collection);}else if (isMap(clazz)) { // 集合HashMap<?,?> collection = (HashMap<?,?>) o;serializeMap(js, collection);} else { // 单个值try {js.value(o);} catch (JSONException e) {e.printStackTrace();}}}/** * 序列化数组  * @param jsjson对象 * @param array数组 */private static void serializeArray(JSONStringer js, Object array) {try {js.array();for (int i = 0; i < Array.getLength(array); ++i) {Object o = Array.get(array, i);serialize(js, o);}js.endArray();} catch (Exception e) {e.printStackTrace();}}/** * 序列化集合 * @param jsjson对象 * @param collection集合 */private static void serializeCollect(JSONStringer js, Collection<?> collection) {try {js.array();for (Object o : collection) {serialize(js, o);}js.endArray();} catch (Exception e) {e.printStackTrace();}}/** * 序列化Map * @param jsjson对象 * @param mapmap对象 */private static void serializeMap(JSONStringer js, Map<?,?> map) {try {js.object();@SuppressWarnings("unchecked")Map<String, Object> valueMap = (Map<String, Object>) map;Iterator<Map.Entry<String, Object>> it = valueMap.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, Object> entry = (Map.Entry<String, Object>)it.next();js.key(entry.getKey());serialize(js,entry.getValue());}js.endObject();} catch (Exception e) {e.printStackTrace();}}/** * 序列化对象 * @param jsjson对象 * @param obj待序列化对象 */private static void serializeObject(JSONStringer js, Object obj) {try {js.object();Class<? extends Object> objClazz = obj.getClass();//获取所有的数组Method[] methods = objClazz.getDeclaredMethods(); //获取所有的字段        Field[] fields = objClazz.getDeclaredFields();          //遍历这个对象        for (Field field : fields) {               try {                   String fieldType = field.getType().getSimpleName();                   String fieldGetName = parseMethodName(field.getName(),"get");                   if (!haveMethod(methods, fieldGetName)) {                       continue;                   }                   Method fieldGetMet = objClazz.getMethod(fieldGetName, new Class[] {});                   Object fieldVal = fieldGetMet.invoke(obj, new Object[] {});                   Object result = null;                   if ("Date".equals(fieldType)) {                       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.US);                       result = sdf.format((Date)fieldVal);                  } else {                       if (null != fieldVal) {                           result = fieldVal;                       }                   }                   js.key(field.getName());serialize(js, result);              } catch (Exception e) {                   continue;               }           }  js.endObject();} catch (Exception e) {e.printStackTrace();}}/** * 判断是否存在某属性的 get方法 * @param methods引用方法的数组 * @param fieldMethod方法名称 * @return true或者false */public static boolean haveMethod(Method[] methods, String fieldMethod) {for (Method met : methods) {if (fieldMethod.equals(met.getName())) {return true;}}return false;}/** * 拼接某属性的 get或者set方法 * @param fieldName字段名称 * @param methodType方法类型 * @return 方法名称 */public static String parseMethodName(String fieldName,String methodType) {if (null == fieldName || "".equals(fieldName)) {return null;}return methodType + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);}/**       * 给字段赋值       * @param obj  实例对象     * @param valMap  值集合     */      public static void setFieldValue(Object obj, Map<String, String> valMap) {           Class<?> cls = obj.getClass();           // 取出bean里的所有方法           Method[] methods = cls.getDeclaredMethods();           Field[] fields = cls.getDeclaredFields();             for (Field field : fields) {               try {                     String setMetodName = parseMethodName(field.getName(),"set");                   if (!haveMethod(methods, setMetodName)) {                       continue;                   }                   Method fieldMethod = cls.getMethod(setMetodName, field                           .getType());                   String value = valMap.get(field.getName());                   if (null != value && !"".equals(value)) {                       String fieldType = field.getType().getSimpleName();                       if ("String".equals(fieldType)) {                           fieldMethod.invoke(obj, value);                       } else if ("Date".equals(fieldType)) {                           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.US);                           Date temp = sdf.parse(value);                            fieldMethod.invoke(obj, temp);                       } else if ("Integer".equals(fieldType)                               || "int".equals(fieldType)) {                           Integer intval = Integer.parseInt(value);                           fieldMethod.invoke(obj, intval);                       } else if ("Long".equalsIgnoreCase(fieldType)) {                           Long temp = Long.parseLong(value);                           fieldMethod.invoke(obj, temp);                       } else if ("Double".equalsIgnoreCase(fieldType)) {                           Double temp = Double.parseDouble(value);                           fieldMethod.invoke(obj, temp);                       } else if ("Boolean".equalsIgnoreCase(fieldType)) {                           Boolean temp = Boolean.parseBoolean(value);                           fieldMethod.invoke(obj, temp);                       } else {                           System.out.println("setFieldValue not supper type:" + fieldType);                       }                   }               } catch (Exception e) {                   continue;               }           }         }         /**     * bean对象转Map     * @param obj实例对象     * @returnmap集合     */    public static Map<String, String> beanToMap(Object obj) {           Class<?> cls = obj.getClass();           Map<String, String> valueMap = new HashMap<String, String>();           // 取出bean里的所有方法           Method[] methods = cls.getDeclaredMethods();           Field[] fields = cls.getDeclaredFields();             for (Field field : fields) {               try {                   String fieldType = field.getType().getSimpleName();                   String fieldGetName = parseMethodName(field.getName(),"get");                   if (!haveMethod(methods, fieldGetName)) {                       continue;                   }                   Method fieldGetMet = cls.getMethod(fieldGetName, new Class[] {});                   Object fieldVal = fieldGetMet.invoke(obj, new Object[] {});                   String result = null;                   if ("Date".equals(fieldType)) {                       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);                       result = sdf.format((Date)fieldVal);                   } else {                       if (null != fieldVal) {                           result = String.valueOf(fieldVal);                       }                   }                   valueMap.put(field.getName(), result);               } catch (Exception e) {                   continue;               }           }           return valueMap;         }   /** * 给对象的字段赋值 * @param obj类实例 * @param fieldSetMethod字段方法 * @param fieldType字段类型 * @param value */public static void setFiedlValue(Object obj,Method fieldSetMethod,String fieldType,Object value){           try {                if (null != value && !"".equals(value)) {                if ("String".equals(fieldType)) {                   fieldSetMethod.invoke(obj, value.toString());                   } else if ("Date".equals(fieldType)) {                       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.CHINA);                       Date temp = sdf.parse(value.toString());                        fieldSetMethod.invoke(obj, temp);                   } else if ("Integer".equals(fieldType)                           || "int".equals(fieldType)) {                       Integer intval = Integer.parseInt(value.toString());                       fieldSetMethod.invoke(obj, intval);                   } else if ("Long".equalsIgnoreCase(fieldType)) {                       Long temp = Long.parseLong(value.toString());                       fieldSetMethod.invoke(obj, temp);                   } else if ("Double".equalsIgnoreCase(fieldType)) {                       Double temp = Double.parseDouble(value.toString());                       fieldSetMethod.invoke(obj, temp);                   } else if ("Boolean".equalsIgnoreCase(fieldType)) {                       Boolean temp = Boolean.parseBoolean(value.toString());                       fieldSetMethod.invoke(obj, temp);                   } else {                   fieldSetMethod.invoke(obj, value);                 Log.e(TAG, TAG  + ">>>>setFiedlValue -> not supper type" + fieldType);                   } }                        } catch (Exception e) {   //            Log.e(TAG, TAG  + ">>>>>>>>>>set value error.",e);        e.printStackTrace();        }       }/** * 反序列化简单对象 * @param jojson对象 * @param clazz实体类类型 * @return反序列化后的实例 * @throws JSONException  */public static <T> T parseObject(JSONObject jo, Class<T> clazz) throws JSONException {if (clazz == null || isNull(jo)) {return null;}T obj = newInstance(clazz);if (obj == null) {return null;}if(isMap(clazz)){ setField(obj,jo);}else{  // 取出bean里的所有方法           Method[] methods = clazz.getDeclaredMethods();           Field[] fields = clazz.getDeclaredFields();           for (Field f : fields) {String setMetodName = parseMethodName(f.getName(),"set");                   if (!haveMethod(methods, setMetodName)) {                       continue;                   }                 try {Method fieldMethod = clazz.getMethod(setMetodName, f.getType());setField(obj,fieldMethod,f, jo);} catch (Exception e) {e.printStackTrace();}  }}return obj;}/** * 反序列化简单对象 * @param jsonStrjson字符串 * @param clazz实体类类型 * @return反序列化后的实例 * @throws JSONException  */public static <T> T parseObject(String jsonStr, Class<T> clazz) throws JSONException {if (clazz == null || jsonStr == null || jsonStr.length() == 0) {return null;}JSONObject jo = null;jo = new JSONObject(jsonStr);if (isNull(jo)) {return null;}return parseObject(jo, clazz);}/** * 反序列化数组对象 * @param jajson数组 * @param clazz实体类类型 * @return反序列化后的数组 */public static <T> T[] parseArray(JSONArray ja, Class<T> clazz) {if (clazz == null || isNull(ja)) {return null;}int len = ja.length();@SuppressWarnings("unchecked")T[] array = (T[]) Array.newInstance(clazz, len);for (int i = 0; i < len; ++i) {try {JSONObject jo = ja.getJSONObject(i);T o = parseObject(jo, clazz);array[i] = o;} catch (JSONException e) {e.printStackTrace();}}return array;}/** * 反序列化数组对象 * @param jsonStrjson字符串 * @param clazz实体类类型 * @return序列化后的数组 */public static <T> T[] parseArray(String jsonStr, Class<T> clazz) {if (clazz == null || jsonStr == null || jsonStr.length() == 0) {return null;}JSONArray jo = null;try {jo = new JSONArray(jsonStr);} catch (JSONException e) {e.printStackTrace();}if (isNull(jo)) {return null;}return parseArray(jo, clazz);}/** * 反序列化泛型集合 * @param jajson数组 * @param collectionClazz集合类型 * @param genericType实体类类型 * @return * @throws JSONException  */@SuppressWarnings("unchecked")public static <T> Collection<T> parseCollection(JSONArray ja, Class<?> collectionClazz,Class<T> genericType) throws JSONException {if (collectionClazz == null || genericType == null || isNull(ja)) {return null;}Collection<T> collection = (Collection<T>) newInstance(collectionClazz);for (int i = 0; i < ja.length(); ++i) {try {JSONObject jo = ja.getJSONObject(i);T o = parseObject(jo, genericType);collection.add(o);} catch (JSONException e) {e.printStackTrace();}}return collection;}/** * 反序列化泛型集合 * @param jsonStrjson字符串 * @param collectionClazz集合类型 * @param genericType实体类类型 * @return反序列化后的数组 * @throws JSONException  */public static <T> Collection<T> parseCollection(String jsonStr, Class<?> collectionClazz,Class<T> genericType) throws JSONException {if (collectionClazz == null || genericType == null || jsonStr == null|| jsonStr.length() == 0) {return null;}JSONArray jo = null;try {//如果为数组,则此处转化时,需要去掉前面的键,直接后面的[]中的值int index = jsonStr.indexOf("[");String arrayString=null; //获取数组的字符串if(-1!=index){arrayString = jsonStr.substring(index);}//如果为数组,使用数组转化if(null!=arrayString){jo = new JSONArray(arrayString);}else{jo = new JSONArray(jsonStr);}} catch (JSONException e) {e.printStackTrace();}if (isNull(jo)) {return null;}return parseCollection(jo, collectionClazz, genericType);}/** * 根据类型创建对象 * @param clazz待创建实例的类型 * @return实例对象 * @throws JSONException  */@SuppressWarnings({ "unchecked", "rawtypes" })private static <T> T newInstance(Class<T> clazz) throws JSONException {if (clazz == null)return null;T obj = null;if (clazz.isInterface()) {if (clazz.equals(Map.class)) {obj = (T) new HashMap();}else if (clazz.equals(List.class)) {obj = (T) new ArrayList();}else if (clazz.equals(Set.class)) {obj = (T) new HashSet();}else{throw new JSONException("unknown interface: " + clazz);}}else{try {obj = clazz.newInstance();}catch (Exception e) {throw new JSONException("unknown class type: " + clazz);}}return obj;}/** * 设定Map的值 * @param obj待赋值字段的对象 * @param jojson实例 */private static void setField(Object obj, JSONObject jo) {try {@SuppressWarnings("unchecked")Iterator<String> keyIter = jo.keys();String key;Object value;@SuppressWarnings("unchecked")Map<String, Object> valueMap = (Map<String, Object>) obj;while (keyIter.hasNext()) {key = (String) keyIter.next();value = jo.get(key);valueMap.put(key, value);}} catch (JSONException e) {e.printStackTrace();}}/** * 设定字段的值 * @param obj待赋值字段的对象 * @param fieldSetMethod字段方法名 * @param field字段 * @param jojson实例 */private static void setField(Object obj, Method fieldSetMethod,Field field, JSONObject jo) {String name = field.getName();Class<?> clazz = field.getType();try {if (isArray(clazz)) { // 数组Class<?> c = clazz.getComponentType();JSONArray ja = jo.optJSONArray(name);if (!isNull(ja)) {Object array = parseArray(ja, c);setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), array);}} else if (isCollection(clazz)) { // 泛型集合// 获取定义的泛型类型Class<?> c = null;Type gType = field.getGenericType();if (gType instanceof ParameterizedType) {ParameterizedType ptype = (ParameterizedType) gType;Type[] targs = ptype.getActualTypeArguments();if (targs != null && targs.length > 0) {Type t = targs[0];c = (Class<?>) t;}}JSONArray ja = jo.optJSONArray(name);if (!isNull(ja)) {Object o = parseCollection(ja, clazz, c);setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o);}} else if (isSingle(clazz)) { // 值类型Object o = jo.opt(name);if (o != null) {setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o);}} else if (isObject(clazz)) { // 对象JSONObject j = jo.optJSONObject(name);if (!isNull(j)) {Object o = parseObject(j, clazz);setFiedlValue(obj, fieldSetMethod, clazz.getSimpleName(), o);}} else if (isList(clazz)) { // 列表//JSONObject j = jo.optJSONObject(name);//if (!isNull(j)) {//Object o = parseObject(j, clazz);//f.set(obj, o);//}} else {throw new Exception("unknow type!");}} catch (Exception e) {e.printStackTrace();}}/** * 设定字段的值  * @param obj待赋值字段的对象 * @param field字段 * @param jojson实例 */@SuppressWarnings("unused")private static void setField(Object obj, Field field, JSONObject jo) {String name = field.getName();Class<?> clazz = field.getType();try {if (isArray(clazz)) { // 数组Class<?> c = clazz.getComponentType();JSONArray ja = jo.optJSONArray(name);if (!isNull(ja)) {Object array = parseArray(ja, c);field.set(obj, array);}} else if (isCollection(clazz)) { // 泛型集合// 获取定义的泛型类型Class<?> c = null;Type gType = field.getGenericType();if (gType instanceof ParameterizedType) {ParameterizedType ptype = (ParameterizedType) gType;Type[] targs = ptype.getActualTypeArguments();if (targs != null && targs.length > 0) {Type t = targs[0];c = (Class<?>) t;}}JSONArray ja = jo.optJSONArray(name);if (!isNull(ja)) {Object o = parseCollection(ja, clazz, c);field.set(obj, o);}} else if (isSingle(clazz)) { // 值类型Object o = jo.opt(name);if (o != null) {field.set(obj, o);}} else if (isObject(clazz)) { // 对象JSONObject j = jo.optJSONObject(name);if (!isNull(j)) {Object o = parseObject(j, clazz);field.set(obj, o);}} else if (isList(clazz)) { // 列表JSONObject j = jo.optJSONObject(name);if (!isNull(j)) {Object o = parseObject(j, clazz);field.set(obj, o);}}else {throw new Exception("unknow type!");}} catch (Exception e) {e.printStackTrace();}}/** * 判断对象是否为空 * @param obj实例 * @return */private static boolean isNull(Object obj) {if (obj instanceof JSONObject) {return JSONObject.NULL.equals(obj);}return obj == null;}/** * 判断是否是值类型  * @param clazz * @return */private static boolean isSingle(Class<?> clazz) {return isBoolean(clazz) || isNumber(clazz) || isString(clazz);}/** * 是否布尔值 * @param clazz * @return */public static boolean isBoolean(Class<?> clazz) {return (clazz != null)&& ((Boolean.TYPE.isAssignableFrom(clazz)) || (Boolean.class.isAssignableFrom(clazz)));}/** * 是否数值  * @param clazz * @return */public static boolean isNumber(Class<?> clazz) {return (clazz != null)&& ((Byte.TYPE.isAssignableFrom(clazz)) || (Short.TYPE.isAssignableFrom(clazz))|| (Integer.TYPE.isAssignableFrom(clazz))|| (Long.TYPE.isAssignableFrom(clazz))|| (Float.TYPE.isAssignableFrom(clazz))|| (Double.TYPE.isAssignableFrom(clazz)) || (Number.class.isAssignableFrom(clazz)));}/** * 判断是否是字符串  * @param clazz * @return */public static boolean isString(Class<?> clazz) {return (clazz != null)&& ((String.class.isAssignableFrom(clazz))|| (Character.TYPE.isAssignableFrom(clazz)) || (Character.class.isAssignableFrom(clazz)));}/** * 判断是否是对象 * @param clazz * @return */private static boolean isObject(Class<?> clazz) {return clazz != null && !isSingle(clazz) && !isArray(clazz) && !isCollection(clazz) && !isMap(clazz);}/** * 判断是否是数组  * @param clazz * @return */public static boolean isArray(Class<?> clazz) {return clazz != null && clazz.isArray();}/** * 判断是否是集合 * @param clazz * @return */public static boolean isCollection(Class<?> clazz) {return clazz != null && Collection.class.isAssignableFrom(clazz);}/** * 判断是否是Map * @param clazz * @return */public static boolean isMap(Class<?> clazz) {return clazz != null && Map.class.isAssignableFrom(clazz);}/** * 判断是否是列表  * @param clazz * @return */public static boolean isList(Class<?> clazz) {return clazz != null && List.class.isAssignableFrom(clazz);}}

定义一个关联的的JavaBean对象

package com.Platforms.enterprise_Service.Model;import java.io.Serializable;/** * 招聘岗位表 */public class Mo_RecruitPost implements Serializable{private static final long serialVersionUID = -8710264509519802494L;/** * 记录编号 */public int PostID;/** * 岗位名称 */public String PostName;/** * 岗位要求描述 */public String PostIntroduction;/** * 工作地点 */public String RegionName;/** * 岗位薪资 */public String PostSalary;/** * 取系统当前时间 * **/public String PublishTime;public int getPostID() {return PostID;}public void setPostID(int postID) {PostID = postID;}public String getPostName() {return PostName;}public void setPostName(String postName) {PostName = postName;}public String getPostIntroduction() {return PostIntroduction;}public void setPostIntroduction(String postIntroduction) {PostIntroduction = postIntroduction;}public String getRegionName() {return RegionName;}public void setRegionName(String regionName) {RegionName = regionName;}public String getPostSalary() {return PostSalary;}public void setPostSalary(String postSalary) {PostSalary = postSalary;}public String getPublishTime() {return PublishTime;}public void setPublishTime(String publishTime) {PublishTime = publishTime;}public boolean isIsClosed() {return IsClosed;}public void setIsClosed(boolean isClosed) {IsClosed = isClosed;}public Mo_EnterpriseInfo getEntID() {return EntID;}public void setEntID(Mo_EnterpriseInfo entID) {EntID = entID;}public String getJobName() {return JobName;}public void setJobName(String jobName) {JobName = jobName;}public String getEducation() {return education;}public void setEducation(String education) {this.education = education;}public String getExperience() {return experience;}public void setExperience(String experience) {this.experience = experience;}public static long getSerialversionuid() {return serialVersionUID;}/** * 招聘信息是否关闭 * **/public boolean IsClosed;/** * 招聘企业(外键关联T_EnterpriseInfo) * **/public Mo_EnterpriseInfo EntID=new Mo_EnterpriseInfo();/** * 行业名称 * **/public String JobName;/** * 学历 * **/public String education;/** * 工作经验 * **/public String experience;/** * 浏览次数 * **/public int Count;public int getCount() {return Count;}public void setCount(int count) {Count = count;}/** * 无参构造 */public Mo_RecruitPost(){}/** * 有参构造 */public Mo_RecruitPost(int PostID,String PostName,String PostIntroduction,String RegionName,String PostSalary,String PublishTime,boolean IsClosed,Mo_EnterpriseInfo EntID,String JobName,String education,String experience,int count){this.PostID=PostID;this.PostName=PostName;this.PostIntroduction=PostIntroduction;this.RegionName=RegionName;this.PostSalary=PostSalary;this.PublishTime=PublishTime;this.IsClosed=IsClosed;this.EntID=EntID;this.JobName=JobName;this.education=education;this.experience=experience;this.Count=count;}public Mo_RecruitPost(String postName, String postIntroduction,String regionName, String postSalary, String publishTime,String jobName, String education) {super();this.PostName = postName;this.PostIntroduction = postIntroduction;this.RegionName = regionName;this.PostSalary = postSalary;this.PublishTime = publishTime;this.JobName = jobName;this.education = education;}}


将对象序列化发送请求给服务器

/**序列化关联对象,向服务器提交数据 * @param Mo_RecruitPost recruitPost 需要序列化的JavaBean对象Mo_RecruitPost * @param recruitPost由于前台封装数据传到后台 * */public String Senddata (Mo_RecruitPost recruitPost) throws ClientProtocolException, IOException{ String res=null;String url=Urls.SendRecruitAddUrl;HttpClient httpclient=new DefaultHttpClient();//调用jsonHelper,序列化两个实体对象,定义JSON,用于向服务器提交数据String jsonObj = JSONHelper.toJSON(recruitPost);//指定Post参数        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();        nameValuePairs.add(new BasicNameValuePair("data", jsonObj));        nameValuePairs.add(new BasicNameValuePair("type", "SendRecruitAdd"));HttpPost httppost=new HttpPost(url);try {httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}//向服务器发送请求HttpResponse httpresponse=httpclient.execute(httppost);String returnValue = "";JSONObject result = null;if(httpresponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){//接收到服务器端返回的值returnValue = EntityUtils.toString(httpresponse.getEntity(), "UTF-8");try {result = new JSONObject(returnValue);} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}//判断请求是否成功if(result.has("result")){ res=result.optString("result");return res;}else{return"fail";}}else{return"fail";}}
接收到服务器端的值,反序列给前台

/**反序列化关联对象,将数据给前台 * @param Mo_RecruitPost recruitPost 需要反序列化的JavaBean对象Mo_RecruitPost * */public List<Mo_RecruitPost> ReceiveData() throws ClientProtocolException, IOException{//请求地址String url=Urls.SendAllRecruitUrl;HttpClient httpclient=new DefaultHttpClient();        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();        nameValuePairs.add(new BasicNameValuePair("data", ""));        nameValuePairs.add(new BasicNameValuePair("type", "SendAllRecruit"));        HttpPost httppost=new HttpPost(url);try {httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"utf-8"));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}HttpResponse httpresponse=httpclient.execute(httppost);String returnValue = "";if(httpresponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){//反序列化对象try {//得到服务器序列化的对象returnValue=EntityUtils.toString(httpresponse.getEntity(),"utf-8");try {//定义一个JSONObject装结果JSONObject result=new JSONObject(returnValue);List<Mo_RecruitPost>list=new ArrayList<Mo_RecruitPost>();if(result!=null){Mo_RecruitPost[] AryrecruitPost = null;//反序列化数据JSONArray recruitPostjson=result.optJSONArray("data");//得到的序列化数据是个数组型字符串AryrecruitPost= JSONHelper.parseArray(recruitPostjson, Mo_RecruitPost.class);//循环取出数组中的每个对象for(int i=0;i<AryrecruitPost.length;i++){list.add(AryrecruitPost[i]);}return list;}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (ParseException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}return null;}
序列化后的对象是如下的json字符串

{"
<span style="color:#FF0000;">recruitPost":{"address":"广州","id":1,"name":"xiaoluo"}}</span>

0 0
原创粉丝点击