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
Наследование
XmlArrayItemAttribute
Атрибуты

Примеры

В следующем примере сериализуется класс с именем, который содержит поле с именем 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-тега с заданным атрибутом xsi:niltrue.

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)

Применяется к

См. также раздел