XmlArrayItemAttribute 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í.
Představuje atribut, který určuje odvozené typy, které XmlSerializer lze umístit do serializovaného pole.
public ref class XmlArrayItemAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)]
public class XmlArrayItemAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)>]
type XmlArrayItemAttribute = class
inherit Attribute
Public Class XmlArrayItemAttribute
Inherits Attribute
- Dědičnost
- Atributy
Příklady
Následující příklad serializuje třídu s názvem Group
, která obsahuje pole s názvem Employees
, které vrací pole Employee
objektů. Příklad použije pole XmlArrayItemAttribute , čímž dává pokyn XmlSerializer , aby mohl vložit objekty základní třídy () typu (Employee
) i odvozeného typu třídy (Manager
) do serializovaného pole.
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
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:
/* The XmlArrayItemAttribute allows the XmlSerializer to insert
both the base type (Employee) and derived type (Manager)
into serialized arrays. */
[XmlArrayItem(Manager::typeid),
XmlArrayItem(Employee::typeid)]
array<Employee^>^Employees;
/* Use the XmlArrayItemAttribute to specify types allowed
in an array of Object items. */
[XmlArray]
[XmlArrayItem(Int32::typeid,
ElementName="MyNumber"),
XmlArrayItem(String::typeid,
ElementName="MyString"),
XmlArrayItem(Manager::typeid)]
array<Object^>^ExtraInfo;
};
void SerializeObject( String^ filename )
{
// Creates a new XmlSerializer.
XmlSerializer^ s = gcnew XmlSerializer( Group::typeid );
// Writing the XML file to disk requires a TextWriter.
TextWriter^ writer = gcnew StreamWriter( filename );
Group^ group = gcnew Group;
Manager^ manager = gcnew Manager;
Employee^ emp1 = gcnew Employee;
Employee^ emp2 = gcnew Employee;
manager->Name = "Consuela";
manager->Level = 3;
emp1->Name = "Seiko";
emp2->Name = "Martina";
array<Employee^>^emps = {manager,emp1,emp2};
group->Employees = emps;
// Creates an int and a string and assigns to ExtraInfo.
array<Object^>^temp = {43,"Extra",manager};
group->ExtraInfo = temp;
// Serializes the object, and closes the StreamWriter.
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( "Members:" );
System::Collections::IEnumerator^ myEnum = g->Employees->GetEnumerator();
while ( myEnum->MoveNext() )
{
Employee^ e = safe_cast<Employee^>(myEnum->Current);
Console::WriteLine( "\t{0}", e->Name );
}
}
int main()
{
SerializeObject( "TypeDoc.xml" );
DeserializeObject( "TypeDoc.xml" );
}
using System;
using System.IO;
using System.Xml.Serialization;
public class Group
{
/* The XmlArrayItemAttribute allows the XmlSerializer to insert
both the base type (Employee) and derived type (Manager)
into serialized arrays. */
[XmlArrayItem(typeof(Manager)),
XmlArrayItem(typeof(Employee))]
public Employee[] Employees;
/* Use the XmlArrayItemAttribute to specify types allowed
in an array of Object items. */
[XmlArray]
[XmlArrayItem (typeof(int),
ElementName = "MyNumber"),
XmlArrayItem (typeof(string),
ElementName = "MyString"),
XmlArrayItem(typeof(Manager))]
public object [] 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("TypeDoc.xml");
test.DeserializeObject("TypeDoc.xml");
}
public void SerializeObject(string filename)
{
// Creates a new XmlSerializer.
XmlSerializer s = new XmlSerializer(typeof(Group));
// Writing the XML file to disk requires a TextWriter.
TextWriter writer = new StreamWriter(filename);
Group group = new Group();
Manager manager = new Manager();
Employee emp1 = new Employee();
Employee emp2 = new Employee();
manager.Name = "Consuela";
manager.Level = 3;
emp1.Name = "Seiko";
emp2.Name = "Martina";
Employee [] emps = new Employee[3]{manager, emp1, emp2};
group.Employees = emps;
// Creates an int and a string and assigns to ExtraInfo.
group.ExtraInfo = new Object[3]{43, "Extra", manager};
// Serializes the object, and closes the StreamWriter.
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("Members:");
foreach(Employee e in g.Employees)
{
Console.WriteLine("\t" + e.Name);
}
}
}
Option Explicit
Option Strict
Imports System.IO
Imports System.Xml.Serialization
Public Class Group
' The XmlArrayItemAttribute allows the XmlSerializer to insert
' both the base type (Employee) and derived type (Manager)
' into serialized arrays.
<XmlArrayItem(GetType(Manager)), _
XmlArrayItem(GetType(Employee))> _
Public Employees() As Employee
' Use the XmlArrayItemAttribute to specify types allowed
' in an array of Object items.
<XmlArray(), _
XmlArrayItem(GetType(Integer), ElementName := "MyNumber"), _
XmlArrayItem(GetType(String), ElementName := "MyString"), _
XmlArrayItem(GetType(Manager))> _
Public ExtraInfo() As Object
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("TypeDoc.xml")
test.DeserializeObject("TypeDoc.xml")
End Sub
Public Sub SerializeObject(ByVal filename As String)
' Creates a new XmlSerializer.
Dim s As New XmlSerializer(GetType(Group))
' Writing the XML file to disk requires a TextWriter.
Dim writer As New StreamWriter(filename)
Dim group As New Group()
Dim manager As New Manager()
Dim emp1 As New Employee()
Dim emp2 As New Employee()
manager.Name = "Consuela"
manager.Level = 3
emp1.Name = "Seiko"
emp2.Name = "Martina"
Dim emps() As Employee = {manager, emp1, emp2}
group.Employees = emps
' Creates an int and a string and assigns to ExtraInfo.
group.ExtraInfo = New Object() {43, "Extra", manager}
' Serializes the object, and closes the StreamWriter.
s.Serialize(writer, group)
writer.Close()
End Sub
Public Sub DeserializeObject(ByVal 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("Members:")
Dim e As Employee
For Each e In g.Employees
Console.WriteLine(ControlChars.Tab & e.Name)
Next e
End Sub
End Class
Poznámky
Patří XmlArrayItemAttribute do rodiny atributů, které řídí, jak XmlSerializer serializuje nebo deserializuje objekt. Úplný seznam podobných atributů naleznete v části Atributy, které řídí serializaci XML.
Můžete použít u libovolného veřejného člena čtení a zápisu XmlArrayItemAttribute , který vrací pole, nebo k němu můžete získat přístup. Například pole, které vrací pole objektů, kolekci, ArrayListnebo jakoukoli třídu, která implementuje IEnumerable rozhraní.
Podporuje XmlArrayItemAttribute polymorfismus – jinými slovy, umožňuje XmlSerializer přidat odvozené objekty do pole. Předpokládejme například, že pojmenovaná Mammal
třída je odvozena od základní třídy s názvem Animal
. Dále předpokládejme, že pojmenovaná MyAnimals
třída obsahuje pole, které vrací pole Animal
objektů. Chcete-li povolit XmlSerializer serializaci obou Animal
Mammal
typů, použijte u XmlArrayItemAttribute pole dvakrát, pokaždé, když zadáte jeden ze dvou přijatelných typů.
Poznámka
Můžete použít více instancí XmlArrayItemAttribute nebo XmlElementAttribute určit typy objektů, které lze vložit do pole.
Poznámka
Serializace pole nebo vlastnosti, která vrací rozhraní nebo pole rozhraní, není podporováno.
Další informace o používání atributů naleznete v tématu Atributy.
Poznámka
Místo delšího XmlArrayItemAttributeslova můžete použít slovo XmlArrayItem
v kódu.
Konstruktory
XmlArrayItemAttribute() |
Inicializuje novou instanci XmlArrayItemAttribute třídy. |
XmlArrayItemAttribute(String) |
Inicializuje novou instanci XmlArrayItemAttribute třídy a určuje název elementu XML vygenerovaného v dokumentu XML. |
XmlArrayItemAttribute(String, Type) |
Inicializuje novou instanci XmlArrayItemAttribute třídy a určuje název elementu XML vygenerovaného v dokumentu XML a Type který lze vložit do vygenerovaného dokumentu XML. |
XmlArrayItemAttribute(Type) |
Inicializuje novou instanci XmlArrayItemAttribute třídy a určuje Type , které lze vložit do serializované pole. |
Vlastnosti
DataType |
Získá nebo nastaví datový typ XML vygenerovaného XML elementu. |
ElementName |
Získá nebo nastaví název vygenerovaného xml elementu. |
Form |
Získá nebo nastaví hodnotu, která označuje, zda je název vygenerovaného elementu XML kvalifikovaný. |
IsNullable |
Získá nebo nastaví hodnotu, která označuje, zda XmlSerializer musí serializovat člen jako prázdnou xml značku s atributem nastavena |
Namespace |
Získá nebo nastaví obor názvů vygenerovaného elementu XML. |
NestingLevel |
Získá nebo nastaví úroveň v hierarchii elementů XML, které XmlArrayItemAttribute ovlivňuje. |
Type |
Získá nebo nastaví typ povolený v poli. |
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) |