deserializar convert java xml serialization

convert - Serialización XML en Java?



xml to json jackson (11)

Proyecto "Serialización simple XML"

Es posible que desee ver el proyecto de serialización simple XML . Es lo más parecido que he encontrado al System.Xml.Serialization en .Net.

¿Cuál es el análogo de Java de la serialización XML de .NET?



No te olvides de JiBX .


Si está hablando de la serialización XML automática de objetos, consulte Castor :

Castor es un marco de enlace de datos de código abierto para Java [tm]. Es la ruta más corta entre objetos Java, documentos XML y tablas relacionales. Castor proporciona enlace de Java a XML, persistencia de Java a SQL y más.


Usualmente uso http://jaxb.java.net/ o XMLBeans si necesito crear objetos serializables a XML. Ahora, puedo ver que XStream podría ser muy útil, ya que no es intrusivo y tiene una API realmente simple. Jugaré con él pronto y probablemente lo use. El único inconveniente que noté es que no puedo crear la identificación del objeto por mi cuenta para referencias cruzadas.

@Barak Schiller
¡Gracias por publicar un enlace a XStream!


Vale la pena mencionar que desde la versión 1.4, Java tenía las clases java.beans.XMLEncoder y java.beans.XMLDecoder. Estas clases realizan una codificación XML que es al menos muy comparable con la serialización XML y, en algunas circunstancias, puede ser el truco para usted.

Si su clase se apega a la especificación JavaBeans para sus getters y setters, este método es fácil de usar y no necesita un esquema. Con las siguientes advertencias:

  • Al igual que con la serialización Java normal
    • la codificación y la decodificación se ejecutan en un InputStream y OutputStream
    • el proceso utiliza los métodos familiares writeObject y readObject
  • A diferencia de la serialización Java normal
    • la codificación pero también la decodificación hace que se invoquen constructores e inicializadores
    • la codificación y decodificación funcionan independientemente de si su clase implementa Serializable o no
    • los modificadores transitorios no se tienen en cuenta
    • funciona solo para clases públicas, que tienen constructores públicos

Por ejemplo, tome la siguiente declaración:

public class NPair { public NPair() { } int number1 = 0; int number2 = 0; public void setNumber1(int value) { number1 = value;} public int getNumber1() { return number1; } public void setNumber2(int value) { number2 = value; } public int getNumber2() {return number2;} }

Ejecutando este código:

NPair fe = new NPair(); fe.setNumber1(12); fe.setNumber2(13); FileOutputStream fos1 = new FileOutputStream("d://ser.xml"); java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1); xe1.writeObject(fe); xe1.close();

Daría como resultado el siguiente archivo:

<?xml version="1.0" encoding="UTF-8"?> <java version="1.7.0_02" class="java.beans.XMLDecoder"> <object class="NPair"> <void property="number1"> <int>12</int> </void> <void property="number2"> <int>13</int> </void> </object> </java>



XStream es bastante bueno para serializar objetos en XML sin mucha configuración y dinero! (está bajo licencia BSD).

Lo usamos en uno de nuestros proyectos para reemplazar la antigua serialización Java simple y funcionó casi al instante.


XMLBeans funciona muy bien si tiene un esquema para su XML. Crea objetos Java para el esquema y crea métodos de análisis fáciles de usar.


JAXB es parte de la edición estándar JDK versión 1.6+. Por lo tanto, es FREE y no hay bibliotecas adicionales para descargar y administrar. Un ejemplo simple se puede encontrar here

XStream parece estar muerto. La última actualización fue el 6 de diciembre de 2008. Simple parece tan fácil y simple como JAXB, pero no pude encontrar ninguna información de licencia para evaluarlo para uso empresarial.


public static String genXmlTag(String tagName, String innerXml, String properties ) { return String.format("<%s %s>%s</%s>", tagName, properties, innerXml, tagName); } public static String genXmlTag(String tagName, String innerXml ) { return genXmlTag(tagName, innerXml, ""); } public static <T> String serializeXML(List<T> list) { String result = ""; if (list.size() > 0) { T tmp = list.get(0); String clsName = tmp.getClass().getName(); String[] splitCls = clsName.split("//."); clsName = splitCls[splitCls.length - 1]; Field[] fields = tmp.getClass().getFields(); for (T t : list) { String row = ""; try { for (Field f : fields) { Object value = f.get(t); row += genXmlTag(f.getName(), value == null ? "" : value.toString()); } } catch (IllegalAccessException e) { e.printStackTrace(); } row = genXmlTag(clsName, row); result += row; } } result = genXmlTag("root", result); return result; }