XmlElementAttribute Osztály

Definíció

Azt jelzi, hogy egy nyilvános mező vagy tulajdonság egy XML-elemet jelöl, amikor a XmlSerializer szerializálja vagy deszerializálja az azt tartalmazó objektumot.

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
Öröklődés
XmlElementAttribute
Attribútumok

Példák

Az alábbi példa szerializál egy elnevezett Group osztályt, és több tagjára alkalmazza.XmlElementAttribute A névvel ellátott Employees mező objektumtömböt Employee ad vissza. Ebben az esetben a XmlElementAttribute beállítás azt határozza meg, hogy az eredményként kapott XML nem lesz beágyazva (ez a tömb elemeinek alapértelmezett viselkedése).

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

Megjegyzések

Az XmlElementAttribute attribútumcsalád az objektum szerializálásának vagy deszerializálásának módját szabályozza XmlSerializer . A hasonló attribútumok teljes listáját az XML-szerializálást vezérlő attribútumok című témakörben találja.

Az XML-dokumentumok általában XML-elemeket tartalmaznak, amelyek mindegyike három részből áll: egy lehetséges attribútumokkal rendelkező nyitócímke, egy zárócímke és a címkék közötti adatok. Az XML-címkék beágyazhatók, vagyis a címkék közötti adatok XML-elemek is lehetnek. Az egyik elem ezen kapacitása lehetővé teszi a dokumentum számára, hogy adathierarchiákat tartalmazzon. Az XML-elemek attribútumokat is tartalmazhatnak.

A nyilvános mezőkre vagy a XmlElementAttribute nyilvános olvasási/írási tulajdonságokra alkalmazva szabályozhatja az XML-elemek jellemzőit, például az elem nevét és a névteret.

A XmlElementAttribute mező többször is alkalmazható olyan mezőre, amely objektumtömböt ad vissza. Ennek az a célja, hogy (a Type tulajdonságon keresztül) különböző típusokat adjon meg, amelyek beilleszthetők a tömbbe. A következő C#-kód tömbje például sztringeket és egész számokat is elfogad.

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

Ez az alábbihoz hasonló XML-t eredményez.

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

Vegye figyelembe, hogy ha többször alkalmazza a XmlElementAttribute tulajdonságérték megadása ElementName nélkül, az elemek neve az elfogadható objektumok típusáról lesz elnevezve.

Ha egy XmlElementAttribute tömböt visszaadó mezőre vagy tulajdonságra alkalmazza, a tömb elemei XML-elemek sorozataként vannak kódolva.

Ezzel szemben, ha egy XmlElementAttribute ilyen mezőre vagy tulajdonságra nem alkalmazunk, a tömb elemei elemek sorozataként vannak kódolva, a mező vagy tulajdonság után elnevezett elem alá ágyazva. (A tömb szerializálásának szabályozásához használja az XmlArrayAttribute és XmlArrayItemAttribute az attribútumokat.)

A tulajdonságot úgy is beállíthatja Type , hogy az eredeti mező vagy tulajdonság típusából származtatott típust adjon meg – vagyis azt a mezőt vagy tulajdonságot, amelyre a XmlElementAttributemezőt alkalmazta.

Ha egy mező vagy tulajdonság egy értéket ad vissza ArrayList, a tagra több példányt XmlElementAttribute is alkalmazhat. Minden példány esetében állítsa a Type tulajdonságot a tömbbe beszúrható objektumtípusra.

Az attribútumok használatáról további információt az Attribútumok című témakörben talál.

Note

A hosszabb helyett használhatja a szót XmlElement a XmlElementAttributekódban.

Konstruktorok

Name Description
XmlElementAttribute()

Inicializálja a XmlElementAttribute osztály új példányát.

XmlElementAttribute(String, Type)

Inicializálja a XmlElementAttribute példány új példányát, és megadja az XML-elem nevét és annak a tagnak a származtatott típusát, amelyre az XmlElementAttribute alkalmazás vonatkozik. Ez a tagtípus akkor használatos, ha a XmlSerializer szerializálja az azt tartalmazó objektumot.

XmlElementAttribute(String)

Inicializálja az XmlElementAttribute osztály új példányát, és megadja az XML-elem nevét.

XmlElementAttribute(Type)

Inicializálja az XmlElementAttribute osztály új példányát, és megadja annak a tagnak a típusát, amelyre a rendszer alkalmazza az XmlElementAttribute osztályt. Ezt a típust használja az XmlSerializer azt tartalmazó objektum szerializálása vagy deszerializálása.

Tulajdonságok

Name Description
DataType

Lekéri vagy beállítja a által létrehozott XML-elem XML-sémadefiníciójának (XSD) adattípusát XmlSerializer.

ElementName

Lekéri vagy beállítja a létrehozott XML-elem nevét.

Form

Lekéri vagy beállít egy értéket, amely jelzi, hogy az elem minősített-e.

IsNullable

Lekéri vagy beállítja azt az értéket, amely jelzi, hogy a XmlSerializer tagnak üres címkeként kell-e szerializálnia null egy tagotxsi:nil, és az attribútum értéke a true következő.

Namespace

Lekéri vagy beállítja az osztály szerializálásakor eredményül kapott XML-elemhez rendelt névteret.

Order

Lekéri vagy beállítja az elemek szerializálásának vagy deszerializálásának explicit sorrendjét.

Type

Lekéri vagy beállítja az XML-elem megjelenítéséhez használt objektumtípust.

TypeId

Ha származtatott osztályban implementálják, ehhez egy egyedi azonosítót Attributekap.

(Öröklődés forrása Attribute)

Metódusok

Name Description
Equals(Object)

Olyan értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal.

(Öröklődés forrása Attribute)
GetHashCode()

A példány kivonatkódját adja vissza.

(Öröklődés forrása Attribute)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
IsDefaultAttribute()

Ha egy származtatott osztályban felül van bírálva, azt jelzi, hogy a példány értéke-e a származtatott osztály alapértelmezett értéke.

(Öröklődés forrása Attribute)
Match(Object)

Származtatott osztály felülírásakor egy olyan értéket ad vissza, amely jelzi, hogy ez a példány egy adott objektummal egyenlő-e.

(Öröklődés forrása Attribute)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Explicit interfész-implementációk

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

Névkészletet képez le a küldési azonosítók megfelelő készletére.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek a felület típusadatainak lekérésére használhatók.

(Öröklődés forrása Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

(Öröklődés forrása Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

(Öröklődés forrása Attribute)

A következőre érvényes:

Lásd még