Condividi tramite


XmlElementAttribute Classe

Definizione

Indica che un campo pubblico o una proprietà rappresenta un elemento XML quando la XmlSerializer serializza o deserializza l'oggetto che lo contiene.

public ref class XmlElementAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)]
public class XmlElementAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)>]
type XmlElementAttribute = class
    inherit Attribute
Public Class XmlElementAttribute
Inherits Attribute
Ereditarietà
XmlElementAttribute
Attributi

Esempio

L'esempio seguente serializza una classe denominata Group e applica a XmlElementAttribute diversi membri. Il campo denominato Employees restituisce una matrice di Employee oggetti. In questo caso, specifica XmlElementAttribute che il codice XML risultante non verrà annidato, ovvero il comportamento predefinito degli elementi in una matrice.

using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;

public class Group
{
   /* Set the element name and namespace of the XML element.
   By applying an XmlElementAttribute to an array,  you instruct
   the XmlSerializer to serialize the array as a series of XML
   elements, instead of a nested set of elements. */

   [XmlElement(
   ElementName = "Members",
   Namespace = "http://www.cpandl.com")]
   public Employee[] Employees;

   [XmlElement(DataType = "double",
   ElementName = "Building")]
   public double GroupID;

   [XmlElement(DataType = "hexBinary")]
   public byte [] HexBytes;

   [XmlElement(DataType = "boolean")]
   public bool IsActive;

   [XmlElement(Type = typeof(Manager))]
   public Employee Manager;

   [XmlElement(typeof(int),
   ElementName = "ObjectNumber"),
   XmlElement(typeof(string),
   ElementName = "ObjectString")]
   public ArrayList ExtraInfo;
}

public class Employee
{
   public string Name;
}

public class Manager:Employee{
   public int Level;
}

public class Run
{
    public static void Main()
    {
       Run test = new Run();
       test.SerializeObject("FirstDoc.xml");
       test.DeserializeObject("FirstDoc.xml");
    }

   public void SerializeObject(string filename)
   {
      // Create the XmlSerializer.
      XmlSerializer s = new XmlSerializer(typeof(Group));

      // To write the file, a TextWriter is required.
      TextWriter writer = new StreamWriter(filename);

      /* Create an instance of the group to serialize, and set
         its properties. */
      Group group = new Group();
      group.GroupID = 10.089f;
      group.IsActive = false;

      group.HexBytes = new byte[1]{Convert.ToByte(100)};

      Employee x = new Employee();
      Employee y = new Employee();

      x.Name = "Jack";
      y.Name = "Jill";

      group.Employees = new Employee[2]{x,y};

      Manager mgr = new Manager();
      mgr.Name = "Sara";
      mgr.Level = 4;
      group.Manager = mgr;

      /* Add a number and a string to the
      ArrayList returned by the ExtraInfo property. */
      group.ExtraInfo = new ArrayList();
      group.ExtraInfo.Add(42);
      group.ExtraInfo.Add("Answer");

      // Serialize the object, and close the TextWriter.
      s.Serialize(writer, group);
      writer.Close();
   }

   public void DeserializeObject(string filename)
   {
      FileStream fs = new FileStream(filename, FileMode.Open);
      XmlSerializer x = new XmlSerializer(typeof(Group));
      Group g = (Group) x.Deserialize(fs);
      Console.WriteLine(g.Manager.Name);
      Console.WriteLine(g.GroupID);
      Console.WriteLine(g.HexBytes[0]);
      foreach(Employee e in g.Employees)
      {
         Console.WriteLine(e.Name);
      }
   }
}
Imports System.Collections
Imports System.IO
Imports System.Xml.Serialization


Public Class Group
    ' Set the element name and namespace of the XML element.
    <XmlElement(ElementName := "Members", _
     Namespace := "http://www.cpandl.com")> _    
    Public Employees() As Employee
    
    <XmlElement(DataType := "double", _
     ElementName := "Building")> _
    Public GroupID As Double
    
    <XmlElement(DataType := "hexBinary")> _
    Public HexBytes() As Byte
    
    <XmlElement(DataType := "boolean")> _
    Public IsActive As Boolean
    
    <XmlElement(GetType(Manager))> _
    Public Manager As Employee
    
    <XmlElement(GetType(Integer), _
        ElementName := "ObjectNumber"), _
     XmlElement(GetType(String), _
        ElementName := "ObjectString")> _
    Public ExtraInfo As ArrayList
End Class

Public Class Employee
    Public Name As String
End Class

Public Class Manager
    Inherits Employee
    Public Level As Integer
End Class

Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeObject("FirstDoc.xml")
        test.DeserializeObject("FirstDoc.xml")
    End Sub
    
    Public Sub SerializeObject(filename As String)
        ' Create the XmlSerializer.
        Dim s As New XmlSerializer(GetType(Group))
        
        ' To write the file, a TextWriter is required.
        Dim writer As New StreamWriter(filename)
        
        ' Create an instance of the group to serialize, and set
        ' its properties. 
        Dim group As New Group()
        group.GroupID = 10.089f
        group.IsActive = False
        
        group.HexBytes = New Byte() {Convert.ToByte(100)}
        
        Dim x As New Employee()
        Dim y As New Employee()
        
        x.Name = "Jack"
        y.Name = "Jill"
        
        group.Employees = New Employee() {x, y}
        
        Dim mgr As New Manager()
        mgr.Name = "Sara"
        mgr.Level = 4
        group.Manager = mgr
        
        ' Add a number and a string to the
        ' ArrayList returned by the ExtraInfo property. 
        group.ExtraInfo = New ArrayList()
        group.ExtraInfo.Add(42)
        group.ExtraInfo.Add("Answer")
        
        ' Serialize the object, and close the TextWriter.      
        s.Serialize(writer, group)
        writer.Close()
    End Sub    
    
    Public Sub DeserializeObject(filename As String)
        Dim fs As New FileStream(filename, FileMode.Open)
        Dim x As New XmlSerializer(GetType(Group))
        Dim g As Group = CType(x.Deserialize(fs), Group)
        Console.WriteLine(g.Manager.Name)
        Console.WriteLine(g.GroupID)
        Console.WriteLine(g.HexBytes(0))

        Dim e As Employee
        For Each e In g.Employees
            Console.WriteLine(e.Name)
        Next e
    End Sub
End Class

Commenti

Appartiene XmlElementAttribute a una famiglia di attributi che controlla la XmlSerializer modalità di serializzazione o deserializzazione di un oggetto. Per un elenco completo di attributi simili, vedere Attributi che controllano la serializzazione XML.

Un documento XML contiene in genere elementi XML, ognuno dei quali è costituito da tre parti: un tag di apertura con gli attributi possibili, un tag di chiusura e i dati tra i tag. I tag XML possono essere annidati, ovvero i dati tra i tag possono essere anche elementi XML. Questa capacità di un elemento da racchiudere in un altro consente al documento di contenere gerarchie di dati. Un elemento XML può includere anche attributi.

Applicare a XmlElementAttribute campi pubblici o proprietà pubbliche di lettura/scrittura per controllare le caratteristiche degli elementi XML, ad esempio il nome dell'elemento e lo spazio dei nomi.

Può XmlElementAttribute essere applicato più volte a un campo che restituisce una matrice di oggetti. Lo scopo di questa operazione è specificare (tramite la Type proprietà) tipi diversi che possono essere inseriti nella matrice. Ad esempio, la matrice nel codice C# seguente accetta sia stringhe che numeri interi.

public class Things{
   [XmlElement(Type = typeof(string)),
   XmlElement(Type = typeof(int))]
   public object[] StringsAndInts;
}

In questo modo, il codice XML potrebbe essere simile al seguente.

<Things>
   <string>Hello</string>
   <int>999</int>
   <string>World</string>
</Things>

Si noti che quando si applicano più XmlElementAttribute volte senza specificare un ElementName valore di proprietà, gli elementi vengono denominati dopo il tipo degli oggetti accettabili.

Se si applica a XmlElementAttribute un campo o a una proprietà che restituisce una matrice, gli elementi nella matrice vengono codificati come sequenza di elementi XML.

Al contrario, se un oggetto XmlElementAttribute non viene applicato a tale campo o proprietà, gli elementi nella matrice vengono codificati come sequenza di elementi, annidati sotto un elemento denominato dopo il campo o la proprietà. Usare gli attributi e XmlArrayItemAttribute per controllare la XmlArrayAttribute modalità di serializzazione di una matrice.

È possibile impostare la Type proprietà per specificare un tipo derivato dal tipo del campo o della proprietà originale, ovvero il campo o la proprietà a cui è stato applicato .XmlElementAttribute

Se un campo o una proprietà restituisce un oggetto ArrayList, è possibile applicare più istanze di XmlElementAttribute al membro. Per ogni istanza, impostare la Type proprietà su un tipo di oggetto che può essere inserito nella matrice.

Per altre informazioni sull'uso degli attributi, vedere Attributi.

Annotazioni

È possibile usare la parola XmlElement nel codice anziché quella più lunga XmlElementAttribute.

Costruttori

Nome Descrizione
XmlElementAttribute()

Inizializza una nuova istanza della classe XmlElementAttribute.

XmlElementAttribute(String, Type)

Inizializza una nuova istanza di XmlElementAttribute e specifica il nome dell'elemento XML e un tipo derivato per il membro a cui viene applicato l'oggetto XmlElementAttribute . Questo tipo di membro viene utilizzato quando l'oggetto XmlSerializer serializza l'oggetto che lo contiene.

XmlElementAttribute(String)

Inizializza una nuova istanza della XmlElementAttribute classe e specifica il nome dell'elemento XML.

XmlElementAttribute(Type)

Inizializza una nuova istanza della XmlElementAttribute classe e specifica un tipo per il membro a cui viene applicato l'oggetto XmlElementAttribute . Questo tipo viene utilizzato dall'oggetto durante la serializzazione o la deserializzazione dell'oggetto XmlSerializer che lo contiene.

Proprietà

Nome Descrizione
DataType

Ottiene o imposta il tipo di dati XSD (XML Schema Definition) dell'elemento XML generato da XmlSerializer.

ElementName

Ottiene o imposta il nome dell'elemento XML generato.

Form

Ottiene o imposta un valore che indica se l'elemento è qualificato.

IsNullable

Ottiene o imposta un valore che indica se deve XmlSerializer serializzare un membro impostato su null come tag vuoto con l'attributo xsi:nil impostato su true.

Namespace

Ottiene o imposta lo spazio dei nomi assegnato all'elemento XML che restituisce quando la classe viene serializzata.

Order

Ottiene o imposta l'ordine esplicito in cui gli elementi vengono serializzati o deserializzati.

Type

Ottiene o imposta il tipo di oggetto utilizzato per rappresentare l'elemento XML.

TypeId

Se implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute.

(Ereditato da Attribute)

Metodi

Nome Descrizione
Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per questa istanza.

(Ereditato da Attribute)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

Quando sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo per un oggetto, che può essere utilizzato per ottenere le informazioni sul tipo per un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso alle proprietà e ai metodi esposti da un oggetto .

(Ereditato da Attribute)

Si applica a

Vedi anche