Sdílet prostřednictvím


XmlElementAttribute Třída

Definice

Označuje, že veřejné pole nebo vlastnost představuje XML element, když XmlSerializer serializuje nebo deserializuje objekt, který jej obsahuje.

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
Dědičnost
XmlElementAttribute
Atributy

Příklady

Následující příklad serializuje třídu pojmenovanou Group a použije XmlElementAttribute na několik jejích členů. Pole s názvem Employees vrátí pole Employee objektů. V tomto případě určuje, XmlElementAttribute že výsledný kód XML nebude vnořený (což je výchozí chování položek v poli).

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

Poznámky

Patří XmlElementAttribute do řady atributů, které řídí, jak XmlSerializer serializuje nebo deserializuje objekt. Úplný seznam podobných atributů naleznete v části Atributy, které řídí serializaci XML.

Dokument XML obvykle obsahuje elementy XML, z nichž každý se skládá ze tří částí: počáteční značka s možnými atributy, pravou značkou a daty mezi značkami. Značky XML můžou být vnořené– to znamená, že data mezi značkami mohou být také elementy XML. Tato kapacita jednoho prvku pro uzavření jiného umožňuje dokumentu obsahovat hierarchie dat. Element XML může také obsahovat atributy.

XmlElementAttribute Použití u veřejných polí nebo veřejných vlastností pro čtení a zápis pro řízení charakteristik elementů XML, jako je název elementu a obor názvů.

Toto XmlElementAttribute pole lze použít vícekrát u pole, které vrací pole objektů. Účelem tohoto postupu je zadat (prostřednictvím Type vlastnosti) různé typy, které lze vložit do pole. Například pole v následujícím kódu jazyka C# přijímá řetězce i celá čísla.

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

Výsledkem je xml, který by mohl vypadat přibližně takto.

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

Všimněte si, že pokud použijete XmlElementAttribute vícekrát bez zadání ElementName hodnoty vlastnosti, prvky jsou pojmenovány po typu přijatelných objektů.

Pokud použijete XmlElementAttribute pole nebo vlastnost, která vrací pole, položky v poli jsou kódovány jako posloupnost elementů XML.

Naproti tomu v případě, že XmlElementAttribute není použit na takové pole nebo vlastnost, položky v poli jsou kódovány jako posloupnost prvků, vnořené pod element pojmenovaný za pole nebo vlastnost. (Pomocí XmlArrayAttribute atributů můžete XmlArrayItemAttribute řídit, jak je pole serializováno.)

Vlastnost můžete nastavit Type tak, aby určila typ odvozený od typu původního pole nebo vlastnosti – to znamená pole nebo vlastnost, na které jste použili XmlElementAttribute.

Pokud pole nebo vlastnost vrátí ArrayListhodnotu , můžete použít více instancí XmlElementAttribute člena. Pro každou instanci nastavte Type vlastnost na typ objektu, který lze vložit do pole.

Další informace o používání atributů naleznete v tématu Atributy.

Poznámka:

Místo delšího XmlElementAttributekódu můžete použít slovo XmlElement v kódu .

Konstruktory

Name Description
XmlElementAttribute()

Inicializuje novou instanci XmlElementAttribute třídy.

XmlElementAttribute(String, Type)

Inicializuje novou instanci objektu XmlElementAttribute a určuje název elementu XML a odvozený typ člena, na který XmlElementAttribute je použit. Tento typ členu se používá při XmlSerializer serializaci objektu, který ho obsahuje.

XmlElementAttribute(String)

Inicializuje novou instanci XmlElementAttribute třídy a určuje název elementu XML.

XmlElementAttribute(Type)

Inicializuje novou instanci XmlElementAttribute třídy a určuje typ člena, na který XmlElementAttribute je použit. Tento typ se používá XmlSerializer při serializaci nebo deserializaci objektu, který jej obsahuje.

Vlastnosti

Name Description
DataType

Získá nebo nastaví xml schema definice (XSD) datový typ XML element vygenerovaný XmlSerializer.

ElementName

Získá nebo nastaví název vygenerovaného XML elementu.

Form

Získá nebo nastaví hodnotu, která určuje, zda je prvek kvalifikovaný.

IsNullable

Získá nebo nastaví hodnotu, která určuje, zda XmlSerializer musí serializovat člen, který je nastaven jako null prázdná značka s xsi:nil atributem nastavena na true.

Namespace

Získá nebo nastaví obor názvů přiřazený xml elementu, který je výsledkem, když je třída serializována.

Order

Získá nebo nastaví explicitní pořadí, ve kterém jsou prvky serializovány nebo deserializovány.

Type

Získá nebo nastaví typ objektu použitý k reprezentaci XML elementu.

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.

(Zděděno od Attribute)

Metody

Name Description
Equals(Object)

Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

(Zděděno od Attribute)
GetHashCode()

Vrátí kód hash pro tuto instanci.

(Zděděno od Attribute)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě určuje, zda hodnota této instance je výchozí hodnotou pro odvozenou třídu.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která určuje, zda se tato instance rovná zadanému objektu.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

Name Description
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

(Zděděno od Attribute)

Platí pro

Viz také