XmlElementAttribute Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
- Atributy
Příklady
Následující příklad serializuje třídu pojmenovanou Group
a aplikuje 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.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::Collections;
using namespace System::IO;
using namespace System::Xml::Serialization;
public ref class Employee
{
public:
String^ Name;
};
public ref class Manager: public Employee
{
public:
int Level;
};
public ref class Group
{
public:
/* 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")]
array<Employee^>^Employees;
[XmlElement(DataType="snippet1>",
ElementName="Building")]
double GroupID;
[XmlElement(DataType="hexBinary")]
array<Byte>^HexBytes;
[XmlElement(DataType="boolean")]
bool IsActive;
[XmlElement(Type=::Manager::typeid)]
Employee^ Manager;
[XmlElement(Int32::typeid,
ElementName="ObjectNumber"),
XmlElement(String::typeid,
ElementName="ObjectString")]
ArrayList^ ExtraInfo;
};
void SerializeObject( String^ filename )
{
// Create the XmlSerializer.
XmlSerializer^ s = gcnew XmlSerializer( Group::typeid );
// To write the file, a TextWriter is required.
TextWriter^ writer = gcnew StreamWriter( filename );
/* Create an instance of the group to serialize, and set
its properties. */
Group^ group = gcnew Group;
group->GroupID = 10.089f;
group->IsActive = false;
array<Byte>^temp0 = {Convert::ToByte( 100 )};
group->HexBytes = temp0;
Employee^ x = gcnew Employee;
Employee^ y = gcnew Employee;
x->Name = "Jack";
y->Name = "Jill";
array<Employee^>^temp1 = {x,y};
group->Employees = temp1;
Manager^ mgr = gcnew 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 = gcnew ArrayList;
group->ExtraInfo->Add( 42 );
group->ExtraInfo->Add( "Answer" );
// Serialize the object, and close the TextWriter.
s->Serialize( writer, group );
writer->Close();
}
void DeserializeObject( String^ filename )
{
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
XmlSerializer^ x = gcnew XmlSerializer( Group::typeid );
Group^ g = dynamic_cast<Group^>(x->Deserialize( fs ));
Console::WriteLine( g->Manager->Name );
Console::WriteLine( g->GroupID );
Console::WriteLine( g->HexBytes[ 0 ] );
IEnumerator^ myEnum = g->Employees->GetEnumerator();
while ( myEnum->MoveNext() )
{
Employee^ e = safe_cast<Employee^>(myEnum->Current);
Console::WriteLine( e->Name );
}
}
int main()
{
SerializeObject( "FirstDoc.xml" );
DeserializeObject( "FirstDoc.xml" );
}
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 rodiny 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í: levá 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 můžou 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žijte u veřejných polí nebo vlastností veřejného čtení a zápisu řídit charakteristiky elementů XML, jako je název elementu a obor názvů.
Lze XmlElementAttribute použít vícekrát na 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 podobně jako v následujícím příkladu.
<Things>
<string>Hello</string>
<int>999</int>
<string>World</string>
</Things>
Všimněte si, že když použijete vícekrát XmlElementAttribute bez zadání ElementName hodnoty vlastnosti, prvky jsou pojmenovány za typ 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 na takové pole nebo vlastnost není použit, 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 byla zadána 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í hodnotu ArrayList, 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 XmlElementAttributeslova můžete použít slovo XmlElement
v kódu.
Konstruktory
XmlElementAttribute() |
Inicializuje novou instanci XmlElementAttribute třídy. |
XmlElementAttribute(String) |
Inicializuje novou instanci XmlElementAttribute třídy a určuje název xml elementu. |
XmlElementAttribute(String, Type) |
Inicializuje novou instanci XmlElementAttribute a určuje název elementu XML a odvozený typ člena, na který XmlElementAttribute je použit. Tento typ členu se používá, když XmlSerializer serializuje objekt, který ho obsahuje. |
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
DataType |
Získá nebo nastaví xml schématu definice (XSD) datový typ XML elementu vygenerovaný XmlSerializer. |
ElementName |
Získá nebo nastaví název vygenerovaného elementu XML. |
Form |
Získá nebo nastaví hodnotu, která označuje, zda je prvek kvalifikovaný. |
IsNullable |
Získá nebo nastaví hodnotu, která označuje, zda XmlSerializer musí serializovat člen, který je nastaven jako |
Namespace |
Získá nebo nastaví obor názvů přiřazený elementu XML, který je výsledkem při serializaci třídy. |
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 elementu XML. |
TypeId |
Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute. (Zděděno od Attribute) |
Metody
Equals(Object) |
Vrací hodnotu, která určuje, zda je tato instance rovna zadanému objektu. (Zděděno od Attribute) |
GetHashCode() |
Vrátí hodnotu hash pro tuto instanci. (Zděděno od Attribute) |
GetType() |
Type Získá aktuální instanci. (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 odvozené třídy. (Zděděno od Attribute) |
Match(Object) |
Při přepsání v odvozené třídě vrátí hodnotu, která označuje, zda se tato instance rovná zadanému objektu. (Zděděno od Attribute) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru 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í
_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 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é
- XmlArrayAttribute
- XmlAttributeOverrides
- XmlAttributes
- XmlElementAttributes
- XmlElements
- XmlRootAttribute
- XmlSerializer
- Představení serializace XML
- Postupy: Zadání alternativního názvu elementu pro XML stream
- Řízení serializace XML pomocí atributů
- Příklady serializace XML
- Nástroje definice schématu XML (Xsd.exe)