XML和json必须要一个字段一个字段的解析吗,该如何解决

XML和json必须要一个字段一个字段的解析吗
大家好,我们平时定义协议的时候,喜欢把数据流定义成XML或者json格式,解析的时候,必须要一个字段一个字段的解析吗?
有没有好一点的解析工具,直接序列化或者反序列化?

------解决方案--------------------
dom4j,sax,jdom,都能解析XML,不用自己写文本解析器。
json用jackson,或者google开源的json解析器都是OK的。
------解决方案--------------------
很简单的数据一般直接读成数据流了   比较格式化的xml文件就用Dom解析吧 很简单的
json没怎么用过  看别人用好像也就几行  没感觉
------解决方案--------------------
Dom效率还是蛮高的
------解决方案--------------------
Android 下应该用 Pull,我刚写了一篇博客《Android 下用 Pull 解析和生成 XML》
楼主可以看看:http://blog.csdn.net/joneeky/article/details/17080127
------解决方案--------------------
json的话jackson gson,xml的话jaxb
------解决方案--------------------
根据放射机制,自己写点代码就好了呀
/**
  * 把json转换成集合
  * @param jsonArr 可以是JSONObject对象或json字符串
  * @param clazz
  * @return
  * @throws Exception
  */
public <T> List<T> jsonToList(Object jsonArr, Class clazz) throws Exception {
List list = new ArrayList();
JSONArray json = (jsonArr instanceof JSONArray ? (JSONArray) jsonArr : new JSONArray(jsonArr.toString()));
for (int i = 0; i < json.length(); i++) {
list.add(jsonToBean(json.get(i), clazz));
}
return list;
}


/**
 * 把json转换成对象
 * @param jsonObj 可以是JSONObject对象或json字符串
 * @param clazz
 * @return
 * @throws Exception
 */
public <T> T jsonToBean(Object jsonObj, Class clazz) throws Exception {
JSONObject json = (jsonObj instanceof JSONObject ? (JSONObject) jsonObj : new JSONObject(jsonObj.toString()));
Object object = clazz.newInstance();Method[] methods = clazz.getMethods();
for (int i = 0; i < methods.length; i++) {
Object value = null;try {value = json.get(getProp(methods[i]));} catch (Exception e) {}
setProp(methods[i], object, value);
}
return (T) object;
}

/**
 * 给对象的属性赋值
 * @param method
 * @param object
 * @param value
 * @return
 */
public Object setProp(Method method, Object object, Object value) {
if (null == method 
------解决方案--------------------
 null == object 
------解决方案--------------------
 null == value 
------解决方案--------------------
 !isPropMethod(method, SET_PROP)) {return object;}
String pn = method.getParameterTypes()[0].getName(), val = value.toString();
if (pn.equals("short") 
------解决方案--------------------
 pn.equals(Short.class.getName())) {
try {method.invoke(object, Short.parseShort(val));} catch (Exception e) {}
} else if (pn.equals("int") 
------解决方案--------------------
 pn.equals(Integer.class.getName())) {
try {method.invoke(object, Integer.parseInt(val));} catch (Exception e) {}
} else if (pn.equals("long") 
------解决方案--------------------
 pn.equals(Long.class.getName())) {
try {method.invoke(object, Long.parseLong(val));} catch (Exception e) {}
} else if (pn.equals(String.class.getName())) {
try {method.invoke(object, val);} catch (Exception e) {}
} else if (pn.equals("float") 
------解决方案--------------------
 pn.equals(Float.class.getName())) {
try {method.invoke(object, Float.parseFloat(val));} catch (Exception e) {}
} else if (pn.equals("double") 
------解决方案--------------------
 pn.equals(Double.class.getName())) {
try {method.invoke(object, Double.parseDouble(val));} catch (Exception e) {}
} else if (pn.equals(BigDecimal.class.getName())) {