XmlAttributes Klass

Definition

Representerar en samling attributobjekt som styr hur XmlSerializer serialiserar och deserialiserar ett objekt.

public ref class XmlAttributes
public class XmlAttributes
type XmlAttributes = class
Public Class XmlAttributes
Arv
XmlAttributes

Exempel

I följande exempel serialiseras en instans av en klass med namnet Orchestra, som innehåller ett enda fält med namnet Instruments som returnerar en matris med Instrument objekt. En andra klass med namnet Brass ärver från Instrument klassen. I exemplet skapas ett XmlAttributes objekt som åsidosätter Instrument fältet – vilket gör att fältet kan acceptera Brass objekt – och lägger till objektet i XmlAttributes en instans av XmlAttributeOverrides klassen.

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

public class Orchestra
{
   public Instrument[] Instruments;
}

public class Instrument
{
   public string Name;
}

public class Brass:Instrument
{
   public bool IsValved;
}

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

    public void SerializeObject(string filename)
    {
      /* Each overridden field, property, or type requires
      an XmlAttributes object. */
      XmlAttributes attrs = new XmlAttributes();

      /* Create an XmlElementAttribute to override the
      field that returns Instrument objects. The overridden field
      returns Brass objects instead. */
      XmlElementAttribute attr = new XmlElementAttribute();
      attr.ElementName = "Brass";
      attr.Type = typeof(Brass);

      // Add the element to the collection of elements.
      attrs.XmlElements.Add(attr);

      // Create the XmlAttributeOverrides object.
      XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();

      /* Add the type of the class that contains the overridden
      member and the XmlAttributes to override it with to the
      XmlAttributeOverrides object. */
      attrOverrides.Add(typeof(Orchestra), "Instruments", attrs);

      // Create the XmlSerializer using the XmlAttributeOverrides.
      XmlSerializer s =
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      // Writing the file requires a TextWriter.
      TextWriter writer = new StreamWriter(filename);

      // Create the object that will be serialized.
      Orchestra band = new Orchestra();

      // Create an object of the derived type.
      Brass i = new Brass();
      i.Name = "Trumpet";
      i.IsValved = true;
      Instrument[] myInstruments = {i};
      band.Instruments = myInstruments;

      // Serialize the object.
      s.Serialize(writer,band);
      writer.Close();
   }

   public void DeserializeObject(string filename)
   {
      XmlAttributeOverrides attrOverrides =
         new XmlAttributeOverrides();
      XmlAttributes attrs = new XmlAttributes();

      // Create an XmlElementAttribute to override the Instrument.
      XmlElementAttribute attr = new XmlElementAttribute();
      attr.ElementName = "Brass";
      attr.Type = typeof(Brass);

      // Add the element to the collection of elements.
      attrs.XmlElements.Add(attr);

      attrOverrides.Add(typeof(Orchestra), "Instruments", attrs);

      // Create the XmlSerializer using the XmlAttributeOverrides.
      XmlSerializer s =
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      FileStream fs = new FileStream(filename, FileMode.Open);
      Orchestra band = (Orchestra) s.Deserialize(fs);
      Console.WriteLine("Brass:");

      /* The difference between deserializing the overridden
      XML document and serializing it is this: To read the derived
      object values, you must declare an object of the derived type
      (Brass), and cast the Instrument instance to it. */
      Brass b;
      foreach(Instrument i in band.Instruments)
      {
         b = (Brass)i;
         Console.WriteLine(
         b.Name + "\n" +
         b.IsValved);
      }
   }
}
Imports System.IO
Imports System.Xml.Serialization

Public Class Orchestra
    Public Instruments() As Instrument
End Class

Public Class Instrument
    Public Name As String
End Class

Public Class Brass
    Inherits Instrument
    Public IsValved As Boolean
End Class


Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeObject("Override.xml")
        test.DeserializeObject("Override.xml")
    End Sub    
    
    Public Sub SerializeObject(ByVal filename As String)
        ' Each overridden field, property, or type requires
        ' an XmlAttributes object. 
        Dim attrs As New XmlAttributes()
        
        ' Create an XmlElementAttribute to override the
        ' field that returns Instrument objects. The overridden field
        ' returns Brass objects instead. 
        Dim attr As New XmlElementAttribute()
        attr.ElementName = "Brass"
        attr.Type = GetType(Brass)
        
        ' Add the element to the collection of elements.
        attrs.XmlElements.Add(attr)
        
        ' Create the XmlAttributeOverrides object.
        Dim attrOverrides As New XmlAttributeOverrides()
        
        ' Add the type of the class that contains the overridden
        ' member and the XmlAttributes to override it with to the
        ' XmlAttributeOverrides object. 
        attrOverrides.Add(GetType(Orchestra), "Instruments", attrs)
        
        ' Create the XmlSerializer using the XmlAttributeOverrides.
        Dim s As New XmlSerializer(GetType(Orchestra), attrOverrides)
        
        ' Writing the file requires a TextWriter.
        Dim writer As New StreamWriter(filename)
        
        ' Create the object that will be serialized.
        Dim band As New Orchestra()
        
        ' Create an object of the derived type.
        Dim i As New Brass()
        i.Name = "Trumpet"
        i.IsValved = True
        Dim myInstruments() As Instrument = {i}
        band.Instruments = myInstruments
        
        ' Serialize the object.
        s.Serialize(writer, band)
        writer.Close()
    End Sub
    
    
    Public Sub DeserializeObject(ByVal filename As String)
        Dim attrOverrides As New XmlAttributeOverrides()
        Dim attrs As New XmlAttributes()
        
        ' Create an XmlElementAttribute to override the Instrument.
        Dim attr As New XmlElementAttribute()
        attr.ElementName = "Brass"
        attr.Type = GetType(Brass)
        
        ' Add the element to the collection of elements.
        attrs.XmlElements.Add(attr)
        
        attrOverrides.Add(GetType(Orchestra), "Instruments", attrs)
        
        ' Create the XmlSerializer using the XmlAttributeOverrides.
        Dim s As New XmlSerializer(GetType(Orchestra), attrOverrides)
        
        Dim fs As New FileStream(filename, FileMode.Open)
        Dim band As Orchestra = CType(s.Deserialize(fs), Orchestra)
        Console.WriteLine("Brass:")
        
        ' The difference between deserializing the overridden
        ' XML document and serializing it is this: To read the derived
        ' object values, you must declare an object of the derived type
        ' (Brass), and cast the Instrument instance to it. 
        Dim b As Brass
        Dim i As Instrument
        For Each i In  band.Instruments
            b = CType(i, Brass)
            Console.WriteLine(b.Name + ControlChars.Cr + _
                              b.IsValved.ToString())
        Next i
    End Sub
End Class

Kommentarer

XmlAttributes Att skapa är en del av en process som åsidosätter standardsättet XmlSerializer serialiserar klassinstanser. Anta till exempel att du vill serialisera ett objekt som skapas från en DLL som har en otillgänglig källa. Med hjälp XmlAttributeOverridesav kan du utöka eller på annat sätt styra hur objektet serialiseras.

Medlemmarna i XmlAttributes klassen motsvarar direkt en familj av attributklasser som styr serialiseringen. Egenskapen måste till exempel XmlText vara inställd på en XmlTextAttribute, som gör att du kan åsidosätta serialisering av ett fält eller en egenskap genom att instruera XmlSerializer att serialisera egenskapsvärdet som XML-text. En fullständig lista över attribut som styr serialisering finns i XmlSerializer.

Mer information om hur du använder XmlAttributeOverrides med XmlAttributes -klassen finns i Så här anger du ett alternativt elementnamn för en XML-dataström.

Konstruktorer

Name Description
XmlAttributes()

Initierar en ny instans av XmlAttributes klassen.

XmlAttributes(ICustomAttributeProvider)

Initierar en ny instans av XmlAttributes klassen och anpassar hur XmlSerializer serialiserar och deserialiserar ett objekt.

Egenskaper

Name Description
XmlAnyAttribute

Hämtar eller anger åsidosättningen XmlAnyAttributeAttribute .

XmlAnyElements

Hämtar den samling XmlAnyElementAttribute objekt som ska åsidosättas.

XmlArray

Hämtar eller anger ett objekt som anger hur XmlSerializer serialiserar ett offentligt fält eller en läs-/skrivegenskap som returnerar en matris.

XmlArrayItems

Hämtar eller anger en samling objekt som anger hur serialiserar objekt som XmlSerializer infogats i en matris som returneras av ett offentligt fält eller en läs-/skrivegenskap.

XmlAttribute

Hämtar eller anger ett objekt som anger hur XmlSerializer serialiserar ett offentligt fält eller en offentlig läs-/skrivegenskap som ett XML-attribut.

XmlChoiceIdentifier

Hämtar eller anger ett objekt som gör att du kan skilja mellan en uppsättning alternativ.

XmlDefaultValue

Hämtar eller anger standardvärdet för ett XML-element eller -attribut.

XmlElements

Hämtar en samling objekt som anger hur XmlSerializer serialiserar ett offentligt fält eller en läs-/skrivegenskap som ett XML-element.

XmlEnum

Hämtar eller anger ett objekt som anger hur XmlSerializer serialiserar en uppräkningsmedlem.

XmlIgnore

Hämtar eller anger ett värde som anger om serialiserar ett offentligt fält eller XmlSerializer en offentlig läs-/skrivegenskap.

Xmlns

Hämtar eller anger ett värde som anger om alla namnområdesdeklarationer ska behållas när ett objekt som innehåller en medlem som returnerar ett XmlSerializerNamespaces objekt åsidosätts.

XmlRoot

Hämtar eller anger ett objekt som anger hur XmlSerializer en klass serialiseras som ett XML-rotelement.

XmlText

Hämtar eller anger ett objekt som instruerar XmlSerializer att serialisera ett offentligt fält eller en offentlig läs-/skrivegenskap som XML-text.

XmlType

Hämtar eller anger ett objekt som anger hur XmlSerializer serialiserar en klass som XmlTypeAttribute har tillämpats på.

Metoder

Name Description
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för

Se även