2011-01-29 2 views
1

Dans Dot Net XmlSerializer objets à xml et désérialiseur pour convertir les balises xml en objets - comment faire en java?Xml Serializer et désérialiseur avec objet

public static object ConvertToObject(Type objectType,String strxml) 
{ 
    try 
    { 
    Object obj=null; 
    XmlSerializer xs=new XmlSerializer(objectType); 
    obj=xs.Deserializer(new StringReader(strxml)); 
    return obj; 
    } 
    catch(Exception e) 
    { 
    } 

//Xml serialized with ihuti java and converted to xml by argobj 
public static object ConvertFromObject(ihutidata argobj)//ihuti.java with xml elements 
{ 
    try 
    { 
    XmlWriterSettings Sett=new XmlWritterSettings(); 
    settings.OmitXmlDeclaration=true; 

    StringBuilder builder=new StringBuilder(); 
    XmlSerializer xs=new XmlSerializer(typeof(ihutidata)); 
    XmlWriter xw=XmlWriter.Create(builder,settings); 

    xs.Serialize(xw,argobj); 
    xw.close(); 

    return (builder.ToString()); 
    } 
    catch(Exception e) 
    { 
    return("Exception"+e); 
    } 
internal string savetodb(TSring argdata,string argclientip) 
{ 
    ihutidata req=(ihutidata)DataProcessing.ConvertToObject(typeof(ihutidata),argdata); 

    if(req!=null) 
    { 
    ...... 
    ...... 
    } 
} 

ya Je suis d'accord avec XStream il convertir le fichier XML à l'objet et vice versa, mais mon problème est .... je dois appeler converttoobject() avec la classe et le transmettre comme objet. Comme le programme reste en C#, je fais le même processus en Java. Ihutidata est une classe qui contient des éléments racines xml, des attributs et des éléments, etc. Est-il possible en Java?

+0

semble que je ne comprends pas ce que vous avez besoin faire. ConvertToObject - est ce que fait xstream.fromXML; ConvertFromObject ressemble à xstream.toXML; "Je dois appeler les deux en en référant un" - que voulez-vous dire? – Maxym

+0

vous savez enfin que je dois appeler comme ceci Ex: ihutidata req = (inhutidata) DataProcessing.ConvertToObject (typeof (ihutidata), argdata); // ihutidata est une classe qui contient xmlelements et les attributs à accéder dans le même paquet. – RSR

Répondre

2

Il y a beaucoup de bibliothèques pour faire ce travail (sérialisation et la désérialisation des objets), l'un des plus simples à utiliser est XStream, here est exemple d'utilisation:

Person joe = new Person("Joe", "Walnes"); 
joe.setPhone(new PhoneNumber(123, "1234-456")); 
joe.setFax(new PhoneNumber(123, "9999-999")); 

Maintenant, vous pouvez exécuter simplement String xml = xstream.toXML(joe); et le résultat est:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Walnes</lastname> 
    <phone> 
    <code>123</code> 
    <number>1234-456</number> 
    </phone> 
    <fax> 
    <code>123</code> 
    <number>9999-999</number> 
    </fax> 
</person> 

Pour objet retour course Person newJoe = (Person)xstream.fromXML(xml);

Une autre pos l'option sible pourrait être JAXB, de wikipedia:

pour XML Architecture Java Binding (JAXB) permet aux développeurs Java de carte classes Java à des représentations XML. JAXB fournit deux fonctionnalités principales: la capacité de marshaler des objets Java en XML et l'inverse, c'est-à-dire de retourner unmarshal XML dans des objets Java. En d'autres mots , JAXB permet de stocker et de récupérer des données en mémoire dans un format XML , sans qu'il soit nécessaire de mettre en œuvre un ensemble spécifique de chargement XML et pour les procédures de sauvegarde la structure de classe du programme. Il est similaire à xsd.exe et xmlserializers dans .Net Framework.

Mais pour moi, la plupart des tâches peuvent être faites avec XStream, qui léger et plus facile (AMHA)

1

Vous pouvez jeter un oeil à XStream.

+0

merci ce que fait XStream? – RSR

+0

Il sérialise un objet en XML et désérialise un XML vers un objet. –

0

En Java, il y a XMLEncoder

Vos méthodes ressemblera à quelque chose comme:

public static <T> T convertToObject(Class<T> objectType, String xml) { 
    XMLDecoder decoder = new XMLDecoder(new ReaderInputStream(new StringReader(xml))); 
    T result = (T) decoder.readObject(); 
    decoder.close(); 
    return result; 
} 

public static String convertToString(Object object) { 
    StringWriter sw = new StringWriter(); 
    XMLEncoder encoder = new XMLEncoder(new WriterOutputStream(sw)); 
    encoder.writeObject(object); 
    encoder.close(); 
    return sw.toString(); 
} 

(Notez que ReaderOutputStream est de apache commons-io)

+0

Je ne peux pas utiliser l'encodeur xml ou le décodeur pour objecttype comme argument – RSR

+0

@RSR pourquoi pas? .. – Bozho

+0

car il n'accepte pas les types de données Typeof() et Type en passant d'autres fonctions. – RSR

Questions connexes