带对象的Xml Serializer和Deserializer

时间:2011-01-29 09:09:42

标签: java web-services netbeans jax-ws

在Dot Net XmlSerializer对象中使用xml和Deserializer将xml标记转换为对象 - 怎么做java?

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)
  {
    ......
    ......
  }
}

是的我同意XStream它将xml转换为对象,反之亦然但我的问题是...... 我必须用class调用converttoobject()并将其作为对象传递。 由于程序仍在C#中,我在java中执行相同的过程。

ihutidata是一个包含xml Root元素,属性和元素等的类。 在Java中可能吗?

3 个答案:

答案 0 :(得分:2)

有许多库可以完成这项工作(序列化和反序列化对象),其中最简单的一个是XStreamhere是使用的示例:

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

现在您可以简单地运行String xml = xstream.toXML(joe);,结果是:

<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>

让对象重新运行Person newJoe = (Person)xstream.fromXML(xml);

另一个可能的选项可能是JAXB来自wikipedia

  

用于XML绑定的Java体系结构   (JAXB)允许Java开发人员进行映射   Java类到XML表示。   JAXB提供两个主要功能:   将Java对象编组到的能力   XML和反向,即unmarshal   XML回到Java对象。其他   单词,JAXB允许存储和   以任何XML检索内存中的数据   格式,无需实现   一组特定的XML加载和   保存程序的例程   阶级结构。它类似于   .Net中的xsd.exe和xmlserializers   框架。

但对我来说,大部分任务都可以通过XStream完成,轻量级且更容易(imho)

答案 1 :(得分:1)

您可以查看XStream

答案 2 :(得分:0)

在Java中有XMLEncoder

您的方法将类似于:

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();
}

(注意ReaderOutputStream来自apache commons-io)