Сериализатор и десериализатор Xml с объектом - PullRequest
1 голос
/ 29 января 2011

В объектах 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 в объект и наоборот, но моя проблема в том, что .... я должен вызвать converttoobject () с классом и передать его как объект. Поскольку программа остается в C #, я делаю тот же процесс в Java.

ihutidata - это класс, который содержит XML-элементы Root, атрибуты, элементы и т. Д. Возможно ли это на Java?

Ответы [ 3 ]

2 голосов
/ 29 января 2011

Есть много библиотек для выполнения этой работы (сериализация и десериализация объектов), одна из самых простых в использовании это XStream , здесь пример использования:

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 :

Архитектура Java для привязки XML (JAXB) позволяет разработчикам Java отображать Классы Java в представлениях XML. JAXB предоставляет две основные функции: способность маршалировать объекты Java в XML и обратное, то есть демаршал XML обратно в объекты Java. В других словами, JAXB позволяет хранить и извлечение данных в памяти в любом XML формат, без необходимости реализации определенный набор загрузки XML и сохранение подпрограмм для программы классовая структура. Это похоже на xsd.exe и xmlserializer в .Net Framework.

Но, как по мне, большинство задач можно выполнить с помощью XStream, которая легче и проще (imho)

1 голос
/ 29 января 2011

Вы можете взглянуть на XStream .

0 голосов
/ 29 января 2011

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

...