XmlArrayItemAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет атрибут, указывающий производные типы, которые XmlSerializer могут размещаться в сериализованном массиве.
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
- Наследование
- Атрибуты
Примеры
В следующем примере сериализуется класс с именем, который содержит поле с именем GroupEmployees , которое возвращает массив Employee объектов. В примере применяется XmlArrayItemAttribute к полю, что указываетXmlSerializer, что он может вставлять объекты базового класса () и производного типа (EmployeeManager) в сериализованный массив.
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
Комментарии
Относится XmlArrayItemAttribute к семейству атрибутов, которые управляют тем, как XmlSerializer сериализует или десериализирует объект. Полный список аналогичных атрибутов см. в разделе Атрибуты, управляющие сериализацией XML.
Вы можете применить XmlArrayItemAttribute любой общедоступный элемент чтения и записи, возвращающий массив или предоставляющий доступ к одному. Например, поле, возвращающее массив объектов, коллекцию, ArrayListили любой класс, реализующий IEnumerable интерфейс.
Поддерживает XmlArrayItemAttribute полиморфизм, другими словами, позволяет XmlSerializer добавлять производные объекты в массив. Например, предположим, что именованный Mammal класс является производным от базового класса с именем Animal. Кроме того, предположим, что класс с именем MyAnimals содержит поле, возвращающее массив Animal объектов. Чтобы разрешить XmlSerializer сериализовать и AnimalMammal тип, примените XmlArrayItemAttribute его к полю дважды, при каждом указании одного из двух допустимых типов.
Note
Можно применить несколько экземпляров XmlArrayItemAttribute или XmlElementAttribute указать типы объектов, которые можно вставить в массив.
Note
Сериализация поля или свойства, возвращающего интерфейс или массив интерфейсов, не поддерживается.
Дополнительные сведения об использовании атрибутов см. в разделе "Атрибуты".
Note
Вы можете использовать слово XmlArrayItem в коде вместо более длинного XmlArrayItemAttribute.
Конструкторы
| Имя | Описание |
|---|---|
| XmlArrayItemAttribute() |
Инициализирует новый экземпляр класса XmlArrayItemAttribute. |
| XmlArrayItemAttribute(String, Type) |
Инициализирует новый экземпляр XmlArrayItemAttribute класса и задает имя XML-элемента, созданного в XML-документе, и Type его можно вставить в созданный XML-документ. |
| XmlArrayItemAttribute(String) |
Инициализирует новый экземпляр XmlArrayItemAttribute класса и задает имя XML-элемента, созданного в XML-документе. |
| XmlArrayItemAttribute(Type) |
Инициализирует новый экземпляр XmlArrayItemAttribute класса и указывает Type , что его можно вставить в сериализованный массив. |
Свойства
| Имя | Описание |
|---|---|
| DataType |
Возвращает или задает тип данных XML созданного XML-элемента. |
| ElementName |
Возвращает или задает имя созданного XML-элемента. |
| Form |
Возвращает или задает значение, указывающее, является ли имя созданного XML-элемента квалифицированным. |
| IsNullable |
Возвращает или задает значение, указывающее, должен ли XmlSerializer сериализовать элемент в виде пустого XML-тега с заданным атрибутом |
| Namespace |
Возвращает или задает пространство имен созданного XML-элемента. |
| NestingLevel |
Возвращает или задает уровень в иерархии XML-элементов, влияющих на нее XmlArrayItemAttribute . |
| Type |
Возвращает или задает тип, разрешенный в массиве. |
| TypeId |
При реализации в производном классе получает уникальный идентификатор для этого Attribute. (Унаследовано от Attribute) |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Возвращает значение, указывающее, равен ли этот экземпляр указанному объекту. (Унаследовано от Attribute) |
| GetHashCode() |
Возвращает хэш-код для этого экземпляра. (Унаследовано от Attribute) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| IsDefaultAttribute() |
При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса. (Унаследовано от Attribute) |
| Match(Object) |
При переопределении в производном классе возвращает значение, указывающее, равен ли этот экземпляр указанному объекту. (Унаследовано от Attribute) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Извлекает сведения о типе объекта, который можно использовать для получения сведений о типе для интерфейса. (Унаследовано от Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. (Унаследовано от Attribute) |
Применяется к
См. также раздел
- XmlArrayAttribute
- XmlSerializer
- XmlArrayItems
- XmlAttributeOverrides
- XmlAttributes
- Введение в сериализацию XML
- Практическое руководство. Указание альтернативного имени элемента для XML-потока
- Управление сериализацией XML с помощью атрибутов
- Примеры сериализации XML
- Инструмент определения схемы XML (Xsd.exe)