XmlAnyElementAttribute Classe

Definizione

Specifica che il membro, ovvero un campo che restituisce una matrice di oggetti XmlElement o XmlNode, può contenere oggetti che rappresentano qualsiasi elemento XML privo di membro corrispondente nell'oggetto da serializzare o deserializzare.

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

Esempio

L'esempio seguente applica l'oggetto XmlAnyElementAttribute a un campo denominato AllElements che restituisce una matrice di XmlElement oggetti.

public ref class XClass
{
public:

   /* Apply the XmlAnyElementAttribute to a field returning an array
      of XmlElement objects. */

   [XmlAnyElement]
   array<XmlElement^>^AllElements;
};

public ref class Test
{
public:
   void DeserializeObject( String^ filename )
   {
      // Create an XmlSerializer.
      XmlSerializer^ mySerializer = gcnew XmlSerializer( XClass::typeid );

      // To read a file, a FileStream is needed.
      FileStream^ fs = gcnew FileStream( filename,FileMode::Open );

      // Deserialize the class.
      XClass^ x = dynamic_cast<XClass^>(mySerializer->Deserialize( fs ));

      // Read the element names and values.
      System::Collections::IEnumerator^ myEnum = x->AllElements->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         XmlElement^ xel = safe_cast<XmlElement^>(myEnum->Current);
         Console::WriteLine( "{0}: {1}", xel->LocalName, xel->Value );
      }
   }
};

int main()
{
   Test^ t = gcnew Test;
   t->DeserializeObject( "XFile.xml" );
}
public class XClass
{
   /* Apply the XmlAnyElementAttribute to a field returning an array
   of XmlElement objects. */
   [XmlAnyElement]
   public XmlElement[] AllElements;
}

public class Test
{
   public static void Main()
   {
      Test t = new Test();
      t.DeserializeObject("XFile.xml");
   }

   private void DeserializeObject(string filename)
   {
      // Create an XmlSerializer.
      XmlSerializer mySerializer = new XmlSerializer(typeof(XClass));

      // To read a file, a FileStream is needed.
      FileStream fs = new FileStream(filename, FileMode.Open);

      // Deserialize the class.
      XClass x = (XClass) mySerializer.Deserialize(fs);

      // Read the element names and values.
      foreach(XmlElement xel in x.AllElements)
         Console.WriteLine(xel.LocalName + ": " + xel.Value);
   }
}
Public Class XClass
    ' Apply the XmlAnyElementAttribute to a field returning an array
    ' of XmlElement objects.
    <XmlAnyElement()> Public AllElements() As XmlElement
End Class


Public Class Test
    
    Public Shared Sub Main()
        Dim t As New Test()
        t.DeserializeObject("XFile.xml")
    End Sub
    
    
    Private Sub DeserializeObject(filename As String)
        ' Create an XmlSerializer.
        Dim mySerializer As New XmlSerializer(GetType(XClass))
        
        ' To read a file, a FileStream is needed.
        Dim fs As New FileStream(filename, FileMode.Open)
        
        ' Deserialize the class.
        Dim x As XClass = CType(mySerializer.Deserialize(fs), XClass)
        
        ' Read the element names and values.
        Dim xel As XmlElement
        For Each xel In  x.AllElements
            Console.WriteLine((xel.LocalName & ": " & xel.Value))
        Next xel
    End Sub
End Class

Commenti

Suggerimento

Quando si lavora in una libreria di classi portabile, ad esempio in Silverlight, Windows Phone o nel progetto app di Windows Store e si usa .NET Framework 4.0.3 e versioni successive, usare XElement o XNode al posto di XmlElement e XmlNode.

Usare l'oggetto XmlAnyElementAttribute per contenere dati arbitrari (come elementi XML) che possono essere inviati come parte di un documento XML, ad esempio i metadati inviati come parte del documento.

Applicare l'oggetto XmlAnyElementAttribute a un campo che restituisce una matrice di XmlElement oggetti o XmlNode . Tale campo può essere usato in due modi, a seconda che un oggetto venga serializzato o deserializzato. Quando viene serializzata, l'oggetto viene generato come elementi o nodi XML, anche se non hanno alcun membro corrispondente (o membri) nell'oggetto in fase di serializzazione. Se si specifica un Name valore di proprietà quando si applica l'attributo, tutti o XmlNode gli XmlElement oggetti inseriti nella matrice devono avere lo stesso nome di elemento e lo spazio dei nomi predefinito oppure viene generata un'eccezione. Se si imposta il valore della Namespace proprietà, è necessario impostare anche la Name proprietà e gli XmlElement oggetti o XmlNode devono avere anche lo stesso nome e i valori dello spazio dei nomi. Se non Name viene specificato alcun valore, gli XmlElement oggetti o XmlNode possono avere qualsiasi nome di elemento.

Quando si chiama il Deserialize metodo della XmlSerializer classe, tutti gli elementi che non hanno un membro corrispondente nell'oggetto deserializzato vengono raccolti nella matrice. Dopo la deserializzazione, eseguire l'iterazione tramite la raccolta di XmlElement elementi per elaborare i dati. Se si specifica un Name valore, la matrice contiene solo elementi XML con tale nome. Se non si specifica un Name valore, la matrice contiene tutti gli elementi che non hanno alcun membro corrispondente nella classe. Se una classe contiene più campi a cui viene applicato l'attributo, utilizzare le Nameproprietà o o NameNamespace per distinguere il contenuto delle matrici. Se tale classe (con più campi) contiene anche un campo che non dispone di valori di proprietà differenzianti impostati (in altre parole Name , e Namespace) durante la deserializzazione, questa matrice contiene tutti gli elementi XML sconosciuti che non sono già contenuti nelle altre matrici. Se una classe contiene più campi che non hanno un set di valori o NameNamespace diversiName, il comportamento durante la deserializzazione non è specificato.

È anche possibile applicare l'oggetto XmlAnyElementAttribute a un campo che restituisce un singolo XmlElement oggetto. In tal caso, è necessario usare le proprietà e i metodi della XmlElement classe per scorrere in modo ricorsivo gli elementi sconosciuti.

È possibile applicare più istanze di a XmlAnyElementAttribute un membro della classe, ma ogni istanza deve avere un valore di proprietà distinto Name . In alternativa, se la stessa Name proprietà è impostata per ogni istanza, è necessario impostare un valore di proprietà distinto Namespace per ogni istanza.

Gli UnknownNode eventi e UnknownAttribute dell'oggetto XmlSerializer non si verificano se si applica l'oggetto XmlAnyElementAttribute a un membro di una classe.

Nota

È possibile usare la parola XmlAnyElement nel codice anziché più lunga XmlAnyElementAttribute.

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

Costruttori

XmlAnyElementAttribute()

Inizializza una nuova istanza della classe XmlAnyElementAttribute.

XmlAnyElementAttribute(String)

Inizializza una nuova istanza della classe XmlAnyElementAttribute e specifica il nome dell'elemento XML generato nel documento XML.

XmlAnyElementAttribute(String, String)

Inizializza una nuova istanza della classe XmlAnyElementAttribute e specifica il nome dell'elemento XML generato nel documento XML e il relativo spazio dei nomi XML.

Proprietà

Name

Ottiene o imposta il nome dell'elemento XML.

Namespace

Ottiene o imposta lo spazio dei nomi XML generato nel documento XML.

Order

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

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

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

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di 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 equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

_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 relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a 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 a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a

Vedi anche