XmlArrayItemAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje atrybut, który określa typy pochodne, które XmlSerializer można umieścić w serializacji tablicy.
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
- Dziedziczenie
- Atrybuty
Przykłady
Poniższy przykład serializuje klasę o nazwie , która zawiera pole o nazwie Group
Employees
, które zwraca tablicę Employee
obiektów. Przykład stosuje element XmlArrayItemAttribute do pola, co powoduje, XmlSerializer że może wstawić obiekty zarówno typu klasy bazowej (), jak i typu klasy pochodnej (Employee
Manager
) do tablicy serializowanej.
#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
Uwagi
Element XmlArrayItemAttribute należy do rodziny atrybutów, które kontrolują sposób XmlSerializer serializacji lub deserializacji obiektu. Aby uzyskać pełną listę podobnych atrybutów, zobacz Atrybuty, które kontrolują serializacji XML.
Można zastosować element XmlArrayItemAttribute do dowolnego publicznego elementu członkowskiego odczytu/zapisu, który zwraca tablicę lub zapewnia dostęp do niej. Na przykład pole zwracające tablicę obiektów, kolekcję, klasę ArrayListlub dowolną klasę, która implementuje IEnumerable interfejs.
Funkcja XmlArrayItemAttribute obsługuje polimorfizm — innymi słowy, umożliwia XmlSerializer dodawanie obiektów pochodnych do tablicy. Załóżmy na przykład, że klasa o nazwie Mammal
pochodzi z klasy bazowej o nazwie Animal
. Ponadto załóżmy, że klasa o nazwie MyAnimals
zawiera pole zwracające tablicę Animal
obiektów. Aby umożliwić XmlSerializer serializacji zarówno Animal
typu, jak i Mammal
, zastosuj XmlArrayItemAttribute do pola dwa razy, za każdym razem określając jeden z dwóch dopuszczalnych typów.
Uwaga
Można zastosować wiele wystąpień XmlArrayItemAttribute obiektu lub XmlElementAttribute w celu określenia typów obiektów, które można wstawić do tablicy.
Uwaga
Serializacja pola lub właściwości zwracającej interfejs lub tablicę interfejsów nie jest obsługiwana.
Aby uzyskać więcej informacji na temat używania atrybutów, zobacz Atrybuty.
Uwaga
Możesz użyć słowa XmlArrayItem
w kodzie zamiast dłuższego XmlArrayItemAttribute.
Konstruktory
XmlArrayItemAttribute() |
Inicjuje nowe wystąpienie klasy XmlArrayItemAttribute. |
XmlArrayItemAttribute(String) |
Inicjuje XmlArrayItemAttribute nowe wystąpienie klasy i określa nazwę elementu XML wygenerowanego w dokumencie XML. |
XmlArrayItemAttribute(String, Type) |
Inicjuje nowe wystąpienie XmlArrayItemAttribute klasy i określa nazwę elementu XML wygenerowanego w dokumencie XML i element Type , który można wstawić do wygenerowanego dokumentu XML. |
XmlArrayItemAttribute(Type) |
Inicjuje XmlArrayItemAttribute nowe wystąpienie klasy i określa Type , które można wstawić do tablicy serializowanej. |
Właściwości
DataType |
Pobiera lub ustawia typ danych XML wygenerowanego elementu XML. |
ElementName |
Pobiera lub ustawia nazwę wygenerowanego elementu XML. |
Form |
Pobiera lub ustawia wartość wskazującą, czy nazwa wygenerowanego elementu XML jest kwalifikowana. |
IsNullable |
Pobiera lub ustawia wartość wskazującą, czy XmlSerializer element członkowski musi serializować jako pusty tag XML z atrybutem ustawionym na |
Namespace |
Pobiera lub ustawia przestrzeń nazw wygenerowanego elementu XML. |
NestingLevel |
Pobiera lub ustawia poziom w hierarchii elementów XML, które XmlArrayItemAttribute mają wpływ. |
Type |
Pobiera lub ustawia typ dozwolony w tablicy. |
TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute. (Odziedziczone po Attribute) |
Metody
Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi. (Odziedziczone po Attribute) |
GetHashCode() |
Zwraca wartość skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
IsDefaultAttribute() |
W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej. (Odziedziczone po Attribute) |
Match(Object) |
W przypadku zastąpienia w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie obiektu, którego można użyć do pobrania informacji o typie interfejsu. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone po Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt. (Odziedziczone po Attribute) |
Dotyczy
Zobacz też
- XmlArrayAttribute
- XmlSerializer
- XmlArrayItems
- XmlAttributeOverrides
- XmlAttributes
- Wprowadzenie do serializacji XML
- Instrukcje: Określanie alternatywnej nazwy elementu dla strumienia XML
- Kontrolowanie serializacji XML przy użyciu atrybutów
- Przykłady serializacji XML
- Narzędzie definicji schematu XML (Xsd.exe)