Help and Support

ID do artigo: 301223 - Última revisão: quinta-feira, 25 de outubro de 2001 - Revisão: 1.0

PROCEDIMENTOS: Ler e gravar objetos usando a serialização XML

Este artigo foi publicado anteriormente em BR301223

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo demonstra como mapear automaticamente um fluxo XML específico em um conjunto de objetos destinados a conter o XML usando as classes de serialização XML.

Requisitos

A lista a seguir apresenta o hardware, software, infra-estrutura de rede e pacotes de serviços recomendados necessários:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server ou Windows NT 4.0 Server.
  • Microsoft Visual Studio .NET.
  • A ferramenta Xsd.exe (fornecida com o Visual Studio .NET e o .Net Framework SDK e localizada em \Arquivos de programas\Microsoft.NET\FrameworkSDK\Bin ou em um local semelhante).
Este artigo supõe que você esteja familiarizado com os seguintes tópicos:
  • Conceitos de serialização
  • Criação e leitura de XML

Como ler e gravar objetos em XML

  1. Crie classes serializáveis ou classes que foram projetadas para funcionar com as classes de serialização XML. Se você possui uma definição de esquema XML (XSD) que descreve o formato do arquivo XML que deseja carregar ou salvar, use a ferramenta Xsd.exe para criar essas classes automaticamente. Você também pode construí-las manualmente. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas:

    1. Salve o esquema XSD a seguir, que descreve pedidos de compra, como um arquivo Po.xsd:
      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  elementFormDefault="qualified"
                  targetNamespace="" >
      
       <xsd:annotation>
        <xsd:documentation>
         Purchase order schema for Example.com.
         Copyright 2000 Example.com. All rights reserved.
        </xsd:documentation>
       </xsd:annotation>
      
       <xsd:element name="purchaseOrder" type="PurchaseOrder" />
      
       <xsd:element name="comment" type="xsd:string"/>
      
       <xsd:complexType name="PurchaseOrder">
        <xsd:sequence>
         <xsd:element name="shipTo" type="USAddress"/>
         <xsd:element name="billTo" type="USAddress"/>
         <xsd:element ref="comment" minOccurs="0"/>
         <xsd:element name="items"  type="Items"/>
        </xsd:sequence>
        <xsd:attribute name="orderDate" type="xsd:date"/>
       </xsd:complexType>
      
       <xsd:complexType name="USAddress">
        <xsd:sequence>
         <xsd:element name="name"   type="xsd:string"/>
         <xsd:element name="street" type="xsd:string"/>
         <xsd:element name="city"   type="xsd:string"/>
         <xsd:element name="state"  type="xsd:string"/>
         <xsd:element name="zip"    type="xsd:decimal"/>
        </xsd:sequence>
        <xsd:attribute name="country" type="xsd:NMTOKEN" />
       </xsd:complexType>
      
       <xsd:complexType name="Items">
        <xsd:sequence>
         <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
          <xsd:complexType>
           <xsd:sequence>
            <xsd:element name="productName" type="xsd:string"/>
            <xsd:element name="quantity">
             <xsd:simpleType>
              <xsd:restriction base="xsd:positiveInteger">
               <xsd:maxExclusive value="100"/>
              </xsd:restriction>
             </xsd:simpleType>
            </xsd:element>
            <xsd:element name="USPrice"    type="xsd:decimal"/>
            <xsd:element ref="comment"   minOccurs="0"/>
            <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
           </xsd:sequence>
           <xsd:attribute name="partNum" type="SKU"/>
          </xsd:complexType>
         </xsd:element>
        </xsd:sequence>
       </xsd:complexType>
      
       <xsd:simpleType name="SKU">
        <xsd:restriction base="xsd:string">
         <xsd:pattern value="\d{3}-[A-Z]{2}"/>
        </xsd:restriction>
       </xsd:simpleType>
      </xsd:schema>
    2. Use a ferramenta Xsd.exe para gerar os arquivos de classe. Por exemplo, o código de linha de comando a seguir gera classes C#:
      xsd /classes /language:C# PO.xsd
      A ferramenta Xsd.exe gera as seguintes classes para o Visual Basic .Net quando usada com o esquema apresentado anteriormente:
      Imports System.Xml.Serialization
      Namespace XmlSerializationHowTo    
          <System.Xml.Serialization.XmlRootAttribute("purchaseOrder", [Namespace]:="", IsNullable:=false)>  _
          Public Class PurchaseOrder
                      <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public shipTo As USAddress
                   <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public billTo As USAddress
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public comment As String
              
              <System.Xml.Serialization.XmlArrayAttribute(IsNullable:=false),  _
               System.Xml.Serialization.XmlArrayItemAttribute("item", IsNullable:=false)>  _
              Public items() As ItemsItem
              <System.Xml.Serialization.XmlAttributeAttribute(DataType:="date")>  _
              Public orderDate As Date
              
              <System.Xml.Serialization.XmlIgnoreAttribute()>  _
              Public orderDateSpecified As Boolean
          End Class
      
          Public Class USAddress
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public name As String
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public street As String  
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public city As String
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public state As String
              
              Public zip As Decimal
              <System.Xml.Serialization.XmlAttributeAttribute(DataType:="NMTOKEN")>  _
              Public country As String
          End Class
          
          <System.Xml.Serialization.XmlTypeAttribute([Namespace]:="")>  _
          Public Class ItemsItem
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public productName As String
              <System.Xml.Serialization.XmlElementAttribute(DataType:="positiveInteger", IsNullable:=false)>  _
              Public quantity As String
              
              Public USPrice As Decimal
              <System.Xml.Serialization.XmlElementAttribute(IsNullable:=false)>  _
              Public comment As String
              
              <System.Xml.Serialization.XmlElementAttribute(DataType:="date", IsNullable:=false)>  _
              Public shipDate As Date
              
              <System.Xml.Serialization.XmlIgnoreAttribute()>  _
              Public shipDateSpecified As Boolean
              
              <System.Xml.Serialization.XmlAttributeAttribute()>  _
              Public partNum As String
          End Class
      End Namespace
      Observe que a ferramenta Xsd.exe não insere o nome do espaço para nomes com as classes. O usuário deve fazer isso manualmente, dependendo do projeto do aplicativo. Neste exemplo, o espaço para nomes XmlSerializationHowTo é usado para englobar as classes geradas pela ferramenta Xsd.exe.
  2. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Depois de criar as classes serializáveis, abra o Visual Studio .NET para criar um novo projeto de serialização.
  3. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Crie um novo aplicativo de console no C# ou no Visual Basic .NET.
  4. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Insira o arquivo de classe gerado pela ferramenta Xsd.exe no projeto. Para fazer isso, clique com o botão direito do mouse no projeto na janela Solution Explorer, clique em Add, selecione Add Existing Item e procure o arquivo de classe anteriormente gerado.
  5. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Certifique-se de que o projeto contenha uma referência aos espaços para nomes System.Xml e XmlSerializationHowTo, que foram criados na etapa anterior. Use a instrução IMPORTS no espaço para nomes Xml para que não seja necessário qualificar declarações XmlSerializer nesses espaços para nomes posteriormente no código. Você deve usar a instrução Imports antes de qualquer outra declaração. Código do Visual Basic .NET
    Imports System.Xml.Serialization
    Imports System.IO
    Imports XmlSerializationHowTo
    Código do C#
    using System.Xml.Serialization;
    using System.IO;
    using XmlSerializationHowTo;
  6. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Crie uma instância da classe XmlSerializer e transmita o tipo de objeto cuja serialização você deseja desfazer. Este exemplo usa o tipo PurchaseOrder anteriormente definido. Código do Visual Basic .NET
    Dim serializer As XmlSerializer = New XmlSerializer(GetType(PurchaseOrder))
    Código do C#
    XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
  7. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Para ler o arquivo, chame o método Deserialize e transmita uma classe Stream, TextReader ou XmlReader. Um pedido de compra é retornado. Neste caso, use o seguinte código: Código do Visual Basic .NET
     
    Dim reader As TextReader = New StreamReader("po.xml")
    Dim po As PurchaseOrder = CType(serializer.Deserialize(reader), PurchaseOrder)
    reader.Close()
    Código do C#
     
    TextReader reader = new StreamReader("po.xml");
    PurchaseOrder po = (PurchaseOrder)serializer.Deserialize(reader);
    reader.Close();
    O arquivo Po.xml contém os dados associados a pedidos de compra que seguem o esquema XSD anteriormente definido. Este é o conteúdo do arquivo:
    <?xml version='1.0' encoding='ISO-8859-1'?>
    <purchaseOrder orderDate="1999-10-20">
        <shipTo country="US">
            <name>Alice Smith</name>
            <street>123 Maple Street</street>
            <city>Mill Valley</city>
            <state>CA</state>
            <zip>90952</zip>
        </shipTo>
        <billTo country="US">
            <name>Robert Smith</name>
            <street>8 Oak Avenue</street>
            <city>Old Town</city>
            <state>PA</state>
            <zip>95819</zip>
        </billTo>
        <comment>Hurry, my lawn is going wild!</comment>
        <items>
            <item partNum="872-AA">
                <productName>Lawnmower</productName>
                <quantity>1</quantity>
                <price>148.95</price>
                <comment>Confirm this is electric</comment>
            </item>
            <item partNum="926-AA">
                <productName>Baby Monitor</productName>
                <quantity>1</quantity>
                <price>39.98</price>
                <shipDate>1999-05-21</shipDate>
            </item>
        </items>
    </purchaseOrder>
  8. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Manipule o objeto PurchaseOrder (por meio da variável PO) como normalmente manipularia qualquer objeto.
  9. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Salve os dados alterados em um novo arquivo XML. Para gravar o arquivo, chame o método Serialize e transmita uma classe Stream, TextReader ou XmlReader, bem como uma instância do pedido de compra: Código do Visual Basic .NET
    Dim writer As TextWriter = New StreamWriter("po2.xml")
    serializer.Serialize(writer, po)
    writer.Close()
    Código do C#
    TextWriter writer = new StreamWriter("po2.xml");
    serializer.Serialize(writer, po);
    writer.Close();
  10. Para criar uma classe serializável usando a ferramenta Xsd.exe, siga estas etapas: Salve e feche o projeto.

REFERÊNCIAS

Para obter mais informações sobre as classes XmlSerializer, StreamWriter e StreamReader, consulte a documentação do .NET Framework Class Library.

Para obter mais informações sobre serialização, consulte a documentação do .NET Framework Developer's Guide.

Para obter mais informações sobre como usar a ferramenta de definição de esquemas XML (XSD.exe), consulte a documentação do .NET Framework Developer's Guide ou a documentação do .NET Framework Tools.


A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework Software Development Kit 1.0
Palavras-chave: 
kbhowto kbhowtomaster kbxml tslic_tslic KB301223
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

Traduções deste artigo

 

Related Support Centers