Serializzazione XML con i Web Service di ASP.NET e ASP

di Stefano Giannone, in ASP.NET,

In questo articolo vedremo come creare un web service .NET che espone un metodo in grado di restituire una stringa XML contenente delle informazioni complesse, che recupereremo e manipoleremo in una pagina ASP grazie all'utilizzo dell'XMLDOM.

Grazie al namespace "System.Xml.Serialization", è possibile infatti serializzare in XML, ovvero rendere persistente un certo oggetto sotto forma di XML, un tipo di dato definito dall'utente tramite la semplice creazione di una classe, con pochissime righe di codice.

Questo processo si rivela uno strumento molto utile quando è necessario restituire al client dei dati in formato complesso, come ad esempio array, il risultato di una query su un database, in quanto consente di superare i limiti di SOAP (e dei Toolkit che esistono attualmente) nella gestione dei tipi di dati complessi, creando e restituendo quindi una semplice stringa contenente però dell'XML.

In più, non dimentichiamo che restituire dati come XML è utilissimo quando il client gira su una piattaforma diversa da quella del server.

Il server

Vediamo subito la parte dell'esempio relativa al web service .NET.

Ecco il codice di xmlSerialization_memoryStream.asmx

<%@ WebService Language="vb" Class="SerializzaXml" %>

Imports System
Imports System.IO
Imports System.Web.Services
Imports System.Xml
Imports System.Xml.Serialization
Public Class SerializzaXml : Inherits WebService

     <WebMethod> public Function xmlDocument() As String

    Dim myOrdine as New Ordine

    Dim strXml as String

    ' Crea le istanze della classe "Item" e ne setta gli attributi

    Dim myItem As New Item()

    myItem.ID = 0

    myItem.Prezzo = 10000

    Dim myItem1 As New Item()

    myItem1.ID = 1

    myItem1.Prezzo = 20000

    ' Crea un array di tipo "Item" composto da 2 elementi

    Dim items(1) As Item

    ' sposto l'istanza di "Item" con i valori settati negli elementi dell'array

    items(0) = myItem

    items(1) = myItem1

    ' Sposta nell'attributo "Items" della classe "Ordine" l'array di tipo "Item"

    myOrdine.Items = items

    'Istanzio un MemoryStream che usa la memoria al posto del disco (capacità iniziale 4KB)

    Dim buffer As New MemoryStream(4096)

    Dim serializer As New XmlSerializer(GetType(Ordine))

    serializer.Serialize(buffer,myOrdine)

    'setta la posizione dello stream all'inizio

    buffer.seek(0,SeekOrigin.Begin)

    'legge lo stream fino alla fine e lo mette nella stringa

    strXml = new StreamReader(buffer).readToEnd()

    ' chiude il MemoryStream

    buffer.close()

    ' ritorna la stringa che contiene l'XML

    return strXml

    End Function

End Class

<XmlRoot("Ordine")> Public Class Ordine

    <XmlArrayAttribute("Items")> Public Items() As Item

End Class

Public Class Item

    Public ID As Integer

    Public Prezzo As Integer

End Class

Potete subito notare la classe "Ordine" è l'elemento chiave della serializzazione in XML. Essa infatti è un tipo di dato complesso formato da un array di due Integer (ID, Prezzo).

Questa viene istanziata all'interno del metodo "xmlDocument()", in cui viene riempito l'array con dei valori ed infine serializzata in XML l'intera classe.

Immagine

2 pagine in totale: 1 2

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti