XmlElementAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, что открытое поле или свойство представляет XML-элемент, когда XmlSerializer сериализует или десериализирует объект, содержащий его.
public ref class XmlElementAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)]
public class XmlElementAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)>]
type XmlElementAttribute = class
inherit Attribute
Public Class XmlElementAttribute
Inherits Attribute
- Наследование
- Атрибуты
Примеры
В следующем примере сериализуется класс с именем Group и применяется XmlElementAttribute к нескольким его членам. Поле с именем Employees возвращает массив Employee объектов. В этом случае указывает, XmlElementAttribute что результирующий XML-код не будет вложен (что является поведением элементов по умолчанию в массиве).
using System;
using System.Collections;
using System.IO;
using System.Xml.Serialization;
public class Group
{
/* Set the element name and namespace of the XML element.
By applying an XmlElementAttribute to an array, you instruct
the XmlSerializer to serialize the array as a series of XML
elements, instead of a nested set of elements. */
[XmlElement(
ElementName = "Members",
Namespace = "http://www.cpandl.com")]
public Employee[] Employees;
[XmlElement(DataType = "double",
ElementName = "Building")]
public double GroupID;
[XmlElement(DataType = "hexBinary")]
public byte [] HexBytes;
[XmlElement(DataType = "boolean")]
public bool IsActive;
[XmlElement(Type = typeof(Manager))]
public Employee Manager;
[XmlElement(typeof(int),
ElementName = "ObjectNumber"),
XmlElement(typeof(string),
ElementName = "ObjectString")]
public ArrayList 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("FirstDoc.xml");
test.DeserializeObject("FirstDoc.xml");
}
public void SerializeObject(string filename)
{
// Create the XmlSerializer.
XmlSerializer s = new XmlSerializer(typeof(Group));
// To write the file, a TextWriter is required.
TextWriter writer = new StreamWriter(filename);
/* Create an instance of the group to serialize, and set
its properties. */
Group group = new Group();
group.GroupID = 10.089f;
group.IsActive = false;
group.HexBytes = new byte[1]{Convert.ToByte(100)};
Employee x = new Employee();
Employee y = new Employee();
x.Name = "Jack";
y.Name = "Jill";
group.Employees = new Employee[2]{x,y};
Manager mgr = new Manager();
mgr.Name = "Sara";
mgr.Level = 4;
group.Manager = mgr;
/* Add a number and a string to the
ArrayList returned by the ExtraInfo property. */
group.ExtraInfo = new ArrayList();
group.ExtraInfo.Add(42);
group.ExtraInfo.Add("Answer");
// Serialize the object, and close the TextWriter.
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(g.Manager.Name);
Console.WriteLine(g.GroupID);
Console.WriteLine(g.HexBytes[0]);
foreach(Employee e in g.Employees)
{
Console.WriteLine(e.Name);
}
}
}
Imports System.Collections
Imports System.IO
Imports System.Xml.Serialization
Public Class Group
' Set the element name and namespace of the XML element.
<XmlElement(ElementName := "Members", _
Namespace := "http://www.cpandl.com")> _
Public Employees() As Employee
<XmlElement(DataType := "double", _
ElementName := "Building")> _
Public GroupID As Double
<XmlElement(DataType := "hexBinary")> _
Public HexBytes() As Byte
<XmlElement(DataType := "boolean")> _
Public IsActive As Boolean
<XmlElement(GetType(Manager))> _
Public Manager As Employee
<XmlElement(GetType(Integer), _
ElementName := "ObjectNumber"), _
XmlElement(GetType(String), _
ElementName := "ObjectString")> _
Public ExtraInfo As ArrayList
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("FirstDoc.xml")
test.DeserializeObject("FirstDoc.xml")
End Sub
Public Sub SerializeObject(filename As String)
' Create the XmlSerializer.
Dim s As New XmlSerializer(GetType(Group))
' To write the file, a TextWriter is required.
Dim writer As New StreamWriter(filename)
' Create an instance of the group to serialize, and set
' its properties.
Dim group As New Group()
group.GroupID = 10.089f
group.IsActive = False
group.HexBytes = New Byte() {Convert.ToByte(100)}
Dim x As New Employee()
Dim y As New Employee()
x.Name = "Jack"
y.Name = "Jill"
group.Employees = New Employee() {x, y}
Dim mgr As New Manager()
mgr.Name = "Sara"
mgr.Level = 4
group.Manager = mgr
' Add a number and a string to the
' ArrayList returned by the ExtraInfo property.
group.ExtraInfo = New ArrayList()
group.ExtraInfo.Add(42)
group.ExtraInfo.Add("Answer")
' Serialize the object, and close the TextWriter.
s.Serialize(writer, group)
writer.Close()
End Sub
Public Sub DeserializeObject(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(g.Manager.Name)
Console.WriteLine(g.GroupID)
Console.WriteLine(g.HexBytes(0))
Dim e As Employee
For Each e In g.Employees
Console.WriteLine(e.Name)
Next e
End Sub
End Class
Комментарии
Относится XmlElementAttribute к семейству атрибутов, которые управляют тем, как XmlSerializer сериализует или десериализирует объект. Полный список аналогичных атрибутов см. в разделе Атрибуты, управляющие сериализацией XML.
XML-документ обычно содержит XML-элементы, каждая из которых состоит из трех частей: открывающего тега с возможными атрибутами, закрывающего тега и данных между тегами. XML-теги могут быть вложенными, т. е. данные между тегами также могут быть XML-элементами. Эта емкость одного элемента для заключения другого позволяет документу содержать иерархии данных. Xml-элемент также может включать атрибуты.
XmlElementAttribute Примените к общедоступным полям или общедоступным свойствам чтения и записи для управления характеристиками XML-элементов, таких как имя элемента и пространство имен.
Его XmlElementAttribute можно применить несколько раз к полю, возвращающего массив объектов. Цель этого — указать (через Type свойство) различные типы, которые можно вставить в массив. Например, массив в следующем коде C# принимает как строки, так и целые числа.
public class Things{
[XmlElement(Type = typeof(string)),
XmlElement(Type = typeof(int))]
public object[] StringsAndInts;
}
Это приводит к тому, что XML-код может выглядеть следующим образом.
<Things>
<string>Hello</string>
<int>999</int>
<string>World</string>
</Things>
Обратите внимание, что при применении XmlElementAttribute нескольких раз без указания ElementName значения свойства элементы именуются в честь типа допустимых объектов.
При применении XmlElementAttribute поля или свойства, возвращающего массив, элементы в массиве кодируются в виде последовательности XML-элементов.
В отличие от того, если к XmlElementAttribute такому полю или свойству не применяется, элементы в массиве кодируются в виде последовательности элементов, вложенных в элемент с именем поля или свойства. (Используйте XmlArrayAttribute атрибуты для XmlArrayItemAttribute управления сериализацией массива.)
Можно задать Type свойство, чтобы указать тип, производный от типа исходного поля или свойства, т. е. поля или свойства, к которому применено значение XmlElementAttribute.
Если поле или свойство возвращает значение ArrayList, можно применить несколько экземпляров XmlElementAttribute элемента. Для каждого экземпляра задайте Type для свойства тип объекта, который можно вставить в массив.
Дополнительные сведения об использовании атрибутов см. в разделе "Атрибуты".
Замечание
Вы можете использовать слово XmlElement в коде вместо более длинного XmlElementAttribute.
Конструкторы
| Имя | Описание |
|---|---|
| XmlElementAttribute() |
Инициализирует новый экземпляр класса XmlElementAttribute. |
| XmlElementAttribute(String, Type) |
Инициализирует новый экземпляр XmlElementAttribute и задает имя XML-элемента и производный тип элемента, к которому XmlElementAttribute применяется. Этот тип элемента используется при XmlSerializer сериализации объекта, содержащего его. |
| XmlElementAttribute(String) |
Инициализирует новый экземпляр XmlElementAttribute класса и задает имя XML-элемента. |
| XmlElementAttribute(Type) |
Инициализирует новый экземпляр XmlElementAttribute класса и задает тип элемента, к которому применяется.XmlElementAttribute Этот тип используется XmlSerializer при сериализации или десериализации объекта, содержащего его. |
Свойства
| Имя | Описание |
|---|---|
| DataType |
Возвращает или задает тип данных определения схемы XML (XSD) элемента XML, созданного методом XmlSerializer. |
| ElementName |
Возвращает или задает имя созданного XML-элемента. |
| Form |
Возвращает или задает значение, указывающее, является ли элемент квалифицированным. |
| IsNullable |
Возвращает или задает значение, указывающее, должен ли XmlSerializer сериализовать элемент, заданный |
| Namespace |
Возвращает или задает пространство имен, назначенное XML-элементу, который приводит к сериализации класса. |
| Order |
Возвращает или задает явный порядок сериализации или десериализации элементов. |
| Type |
Возвращает или задает тип объекта, используемый для представления XML-элемента. |
| 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
- XmlAttributeOverrides
- XmlAttributes
- XmlElementAttributes
- XmlElements
- XmlRootAttribute
- XmlSerializer
- Введение в сериализацию XML
- Практическое руководство. Указание альтернативного имени элемента для XML-потока
- Управление сериализацией XML с помощью атрибутов
- Примеры сериализации XML
- Инструмент определения схемы XML (Xsd.exe)