Прочитать на английском

Поделиться через


XmlArrayItemAttribute Класс

Определение

Представляет атрибут, который определяет производные типы, которые могут быть размещены XmlSerializer в сериализованном массиве.

[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)]
public class XmlArrayItemAttribute : Attribute
Наследование
XmlArrayItemAttribute
Атрибуты

Примеры

В следующем примере выполняется сериализация класса с именем Group , содержащего поле с именем Employees , возвращающее массив Employee объектов . В примере применяется XmlArrayItemAttribute к полю , тем самым указывая XmlSerializer , что он может вставлять объекты как базового класса (Employee), так и производного типа класса (Manager) в сериализованный массив.

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);
      }
   }
}

Комментарии

принадлежит XmlArrayItemAttribute к семейству атрибутов, которые управляют тем, как XmlSerializer сериализует или десериализует объект. Полный список аналогичных атрибутов см. в разделе Атрибуты, управляющие сериализацией XML.

Можно применить к любому общедоступному элементу XmlArrayItemAttribute для чтения и записи, который возвращает массив или предоставляет доступ к нему. Например, поле, возвращающее массив объектов , коллекцию, или любой ArrayListкласс, реализующий IEnumerable интерфейс .

поддерживает XmlArrayItemAttribute полиморфизм, то есть позволяет добавлять производные XmlSerializer объекты в массив. Например, предположим, что класс с именем Mammal является производным от базового класса с именем Animal. Далее предположим, что класс с именем MyAnimals содержит поле, возвращающее массив Animal объектов . Чтобы разрешить XmlSerializer сериализовать тип Animal и Mammal , примените XmlArrayItemAttribute к полю дважды, каждый раз указывая один из двух допустимых типов.

Примечание

Можно применить несколько экземпляров XmlArrayItemAttribute или XmlElementAttribute , чтобы указать типы объектов, которые можно вставить в массив.

Примечание

Сериализация поля или свойства, возвращающего интерфейс или массив интерфейсов, не поддерживается.

Дополнительные сведения об использовании атрибутов см. в разделе Атрибуты.

Примечание

Вы можете использовать слово XmlArrayItem в коде вместо более длинного XmlArrayItemAttribute.

Конструкторы

XmlArrayItemAttribute()

Инициализирует новый экземпляр класса XmlArrayItemAttribute.

XmlArrayItemAttribute(String)

Инициализация нового экземпляра класса XmlArrayItemAttribute и указывает имя элемента XML, сгенерированного в документе XML.

XmlArrayItemAttribute(String, Type)

Инициализация нового экземпляра класса XmlArrayItemAttribute и определяет имя элемента XML, сгенерированного в документе XML, и Type, который может быть вставлен в сгенерированный документ XML.

XmlArrayItemAttribute(Type)

Инициализация нового экземпляра класса XmlArrayItemAttribute и определяет Type, который может быть вставлен в сериализованный массив.

Свойства

DataType

Возвращает или задает тип данных XML сгенерированного элемента XML.

ElementName

Получает или задает имя созданного XML-элемента

Form

Возвращает или задает значение, которое указывает, является ли имя сгенерированного элемента XML полным.

IsNullable

Получает или задает значение, которое показывает, должен ли XmlSerializer выполнить сериализацию члена как пустого тега XML с атрибутом xsi:nil, для которого установлено значение true.

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)

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

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

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