none
xml RRS feed

  • Pregunta

  •  hola Foro:


    Tengo que generar un xmlgenerico que se genera a partir de un store de bd, 

    el xml se va a devolver el xml desde un webmethod por ahora, Lo que esta programado ahora es:

    se levanta datos de la base de datos en un datatable de net    

    Que me sugieren para hacer?, levantar datos de la base de datos y usar dynamic para crear un objeto on the fly a medida que leo el datatable, y despues de una manera pasarlo a xml. 
    O me convendria usar createNode de xml a medida que leo la tabla   xmldoc.CreateNode()

    La idea del  xml generico  es porque se van a agregar campos nuevos a futuro (en el  select del store)por eso no tengo clases especificas, voy a programar para genere e xml con los campos  que ya trae de la bd. y despues cdo se agregue otro campo lo programo de vuelta agregando un createNode. Esto se puede hacer generico.

    Gracias

     
    viernes, 24 de abril de 2015 2:49

Todas las respuestas

  • Hola Inovador2015:

    Si vas a exponer el mismo Xml que te trae el Stored Procedure, para que armar un WebService en VisualStudio? porque no entonces lo exponen directamente desde la Base de Datos? ya que no tiene sentido, a no ser que pretendas modificar el Xml genérico, para algún fin adicional.

    Mi recomendación es: si vas a modificar el Xml, para agregar valor a la información que la Base de Datos te va a exponer en el Stored Procedure, entonces si piensa en un WebService, y haz procesos masivos, para que pueda ser mas rápido el tiempo de respuesta. Pero si el xml que necesitan exponer es el que se genera en el Stored Procedure, y no hay que agregarle valor, exponga el web service desde la base de datos.

    Saludos,


    Camilo Villa

    viernes, 24 de abril de 2015 4:50
  • El objeto DataTable ya tiene un método que permite serializarlo en formato XML:

    DataTable.WriteXml (Método)

    viernes, 24 de abril de 2015 6:50
  • Gracias  Asier por responder y rapido, si lei sobre el writexml(), pero no genera prolijo el xml . 

    algo asi genera el writexml :

    <NewDataSet>
      <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema
    " xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table1">
          <xs:complexType>......

    del store vienen el select no viene en xml. 

    Gracias


    viernes, 24 de abril de 2015 10:49
  • hola

    >>se levanta datos de la base de datos en un datatable de net   

    no recuperes un datatable, crea una clase la cual define un List<> cargalo con los datos que retorna el procedure y luego serializa a xml

    Cómo deserializar un objeto

    >>levantar datos de la base de datos y usar dynamic para crear un objeto on the fly a medida que leo el datatable, y despues de una manera pasarlo a xml.

    no ese camino no aplica, no leas un datatable no es performante lee un datareader usando un

    while(reade.Read()){

    }

    iteral los registros y ve cargando un List<>

    >>La idea del  xml generico  es porque se van a agregar campos nuevos a futuro (en el  select del store)por eso no tengo clases especificas, voy a programar para genere e xml con los campos  que ya trae de la bd. y despues cdo se agregue otro campo lo programo de vuelta agregando un createNode

    no tiene sentido lo que planteas, si igual ante el agregado de un campo tienes que tocar el codigo agregando un createNode entonces programlo de forma correcta definiendo una clase con una propiedad a la cual le pones la informacion y la serializas

    >>el xml se va a devolver el xml desde un webmethod

    pero entonces para que retornas un xml si podrias simplemente devolver una entidad

    [WebMethod]
    public List<Class1> Method1(){
    
       //codigo
    
    }


    con esto ya estaria porque quien lo consume recibe la lista o xml que es lo que usa SOAP no tienes que hace nada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 24 de abril de 2015 10:55
  • gracias por contestar leandro ,pero es un xml generico , no tengo una clase especifica , va a ir cambiando porque se van a ir agregando campos  dinámicos al xml, si es una clase especifica hago lo que vos decis 

    Gracias

    viernes, 24 de abril de 2015 16:12
  • >>va a ir cambiando porque se van a ir agregando campos  dinámicos al xml,

    claro pero a que llamas dinamico ? dinamico es que en la tabla se agregan columnas y tu no tocas una linea de codigo y el xml que se genera incluye esa informacion, o dinamico es que se agrega un campo y tu modificas el codigo para agregar ese nuevo dato

    porque si lo planteas como la segunda opcion en definitiva tocas codigo por lo que no tan dinamico, si es este el caso define una clase y serializala

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 24 de abril de 2015 16:18
  • gracias por contestar, seria  la prima opcion que nombras, de que en la tabla "se agregan columnas y tu no tocas una linea de codigo " como lo podria hacer.

    Con un webmethod asi siempre el proxy del cliente toma como objeto, o hay alguna forma que lo considere como xml ,?

    [WebMethod]
    public List<Class1> Method1(){
    
       //codigo
    
    }

    Gracias



    viernes, 24 de abril de 2015 20:21