标签:
avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善:
1 static <T> List<T> parseArray(JSONArray arrary,Class<?> cls) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException{ 2 List<T> result = new ArrayList<T>(); 3 String className = cls.getName(); 4 for(int i=0;i<arrary.length();i++){ 5 if(className.contains("java.lang")){ 6 if(className.equals("java.lang.CharSequence") || 7 className.equals("java.lang.String")) { 8 result.add((T) arrary.getString(i)); 9 }else if(className.equals("java.lang.Double")) { 10 result.add((T) ((Double)arrary.getDouble(i))); 11 } else if(className.equals("java.lang.Integer")) { 12 result.add((T) ((Integer)arrary.getInt(i))); 13 } else if(className.equals("java.lang.Boolean")) { 14 result.add((T) ((Boolean)arrary.getBoolean(i))); 15 } 16 }else{ 17 // 解析对象 18 result.add((T)json2Bean(arrary.getJSONObject(i),cls)); 19 } 20 } 21 return result; 22 } 23 24 public static <T> T json2Bean(JSONObject jsonObject, Class<?> cls) throws IllegalAccessException, 25 InvocationTargetException, NoSuchMethodException, InstantiationException, ClassNotFoundException { 26 // if (item == null) { 27 // return null; 28 // } 29 T item = (T) cls.newInstance(); 30 Field[] fields = cls.getDeclaredFields(); 31 for (Field field : fields) { 32 String varName = field.getName(); 33 if (jsonObject.has(varName)) { 34 Object value = jsonObject.get(varName); 35 36 Class<?> currentClass = field.getType(); 37 if(currentClass.equals(List.class)){ 38 JSONArray array = (JSONArray)value; 39 String subClassName = field.getGenericType().toString().replace("java.util.List<", ""); 40 subClassName = subClassName.substring(0,subClassName.length()-1); 41 // System.out.println(subClassName); 42 Class<?> clasz = Class.forName(subClassName); 43 // System.out.println(z.getClass()); 44 BeanUtils.setProperty(item, varName, parseArray(array ,clasz)); 45 46 }else{ 47 if(value instanceof JSONObject){ 48 BeanUtils.setProperty(item, varName, json2Bean((JSONObject)value,currentClass)); 49 }else{ 50 if(value instanceof JSONNull){ 51 value = null; 52 } 53 BeanUtils.setProperty(item, varName, value); 54 } 55 } 56 }else{ 57 // 设置默认值 58 //BeanUtils.setProperty(item, varName, null); 59 } 60 } 61 return item; 62 }
标签:
原文地址:http://www.cnblogs.com/xiaoqi/p/4738908.html