XmlAnyElementAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, что элемент (поле, возвращающее массив объектов XmlElement или XmlNode) содержит объекты, представляющие любой XML-элемент, который не имеет соответствующего элемента в объекте, сериализованного или десериализированного.
public ref class XmlAnyElementAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)]
public class XmlAnyElementAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue, AllowMultiple=true)>]
type XmlAnyElementAttribute = class
inherit Attribute
Public Class XmlAnyElementAttribute
Inherits Attribute
- Наследование
- Атрибуты
Примеры
В следующем примере применяется XmlAnyElementAttribute поле с именем AllElements поля, которое возвращает массив XmlElement объектов.
public class XClass
{
/* Apply the XmlAnyElementAttribute to a field returning an array
of XmlElement objects. */
[XmlAnyElement]
public XmlElement[] AllElements;
}
public class Test
{
public static void Main()
{
Test t = new Test();
t.DeserializeObject("XFile.xml");
}
private void DeserializeObject(string filename)
{
// Create an XmlSerializer.
XmlSerializer mySerializer = new XmlSerializer(typeof(XClass));
// To read a file, a FileStream is needed.
FileStream fs = new FileStream(filename, FileMode.Open);
// Deserialize the class.
XClass x = (XClass) mySerializer.Deserialize(fs);
// Read the element names and values.
foreach(XmlElement xel in x.AllElements)
Console.WriteLine(xel.LocalName + ": " + xel.Value);
}
}
Public Class XClass
' Apply the XmlAnyElementAttribute to a field returning an array
' of XmlElement objects.
<XmlAnyElement()> Public AllElements() As XmlElement
End Class
Public Class Test
Public Shared Sub Main()
Dim t As New Test()
t.DeserializeObject("XFile.xml")
End Sub
Private Sub DeserializeObject(filename As String)
' Create an XmlSerializer.
Dim mySerializer As New XmlSerializer(GetType(XClass))
' To read a file, a FileStream is needed.
Dim fs As New FileStream(filename, FileMode.Open)
' Deserialize the class.
Dim x As XClass = CType(mySerializer.Deserialize(fs), XClass)
' Read the element names and values.
Dim xel As XmlElement
For Each xel In x.AllElements
Console.WriteLine((xel.LocalName & ": " & xel.Value))
Next xel
End Sub
End Class
Комментарии
Подсказка
При работе в переносимой библиотеке классов, например в проекте Silverlight, Windows Phone или Приложения Магазина Windows, и вы используете .NET Framework 4.0.3 и более поздних версий, используйте XElement или XNode вместо этогоXmlNode.XmlElement
XmlAnyElementAttribute Используйте для хранения произвольных данных (как XML-элементов), которые могут быть отправлены как часть XML-документа, например метаданные, отправленные в рамках документа.
XmlAnyElementAttribute Примените к полю, возвращающее массив XmlElement или XmlNode объекты. Такое поле можно использовать двумя способами в зависимости от того, сериализуется ли объект или десериализирован. При сериализации объект создается как XML-элементы или узлы, даже если у них нет соответствующих элементов (или членов) в сериализованном объекте. Если при применении атрибута Name указать значение свойства, все XmlElement объекты, XmlNode вставляемые в массив, должны иметь одно и то же имя элемента и пространство имен по умолчанию, или возникает исключение. Если задано Namespace значение свойства, необходимо также задать Name свойство, а XmlElementXmlNode также объекты должны иметь те же значения имени и пространства имен. Если значение не Name указано, XmlElementXmlNode у объекта может быть любое имя элемента.
При вызове Deserialize метода класса все элементы, у которых нет соответствующего XmlSerializer элемента в десериализуемом объекте, собираются в массиве. После десериализации выполните итерацию по коллекции XmlElement элементов для обработки данных. Если указать Name значение, массив содержит только XML-элементы с таким именем. Если значение не указано Name , массив содержит все элементы, у которых нет соответствующего элемента в классе. Если класс содержит несколько полей, к которым применяется атрибут, используйте Nameсвойства или NameNamespace свойства, чтобы различать содержимое массивов. Если такой класс (с несколькими полями) также содержит одно поле, которое не имеет различающихся значений свойств (другими словами, и Namespace) во время десериализации, этот массив содержит любые неизвестные XML-элементы, Name которые еще не содержатся в других массивах. Если класс содержит несколько полей, не имеющих разных Nameзначений или NameNamespace набор значений, поведение во время десериализации не указано.
Вы также можете применить поле XmlAnyElementAttribute , возвращающее один XmlElement объект. При этом необходимо использовать свойства и методы XmlElement класса для рекурсивного итерации через неизвестные элементы.
Можно применить несколько экземпляров XmlAnyElementAttribute элемента класса, но каждый экземпляр должен иметь отдельное Name значение свойства. Или, если для каждого экземпляра задано одно и то же Name свойство, для каждого экземпляра необходимо задать отдельное Namespace значение свойства.
События UnknownNode и UnknownAttribute события XmlSerializer не происходят, если применяется XmlAnyElementAttribute к члену класса.
Замечание
Вы можете использовать слово XmlAnyElement в коде вместо более длинного XmlAnyElementAttribute.
Дополнительные сведения об использовании атрибутов см. в разделе "Атрибуты".
Конструкторы
| Имя | Описание |
|---|---|
| XmlAnyElementAttribute() |
Инициализирует новый экземпляр класса XmlAnyElementAttribute. |
| XmlAnyElementAttribute(String, String) |
Инициализирует новый экземпляр XmlAnyElementAttribute класса и задает имя XML-элемента, созданное в XML-документе и его пространстве имен XML. |
| XmlAnyElementAttribute(String) |
Инициализирует новый экземпляр XmlAnyElementAttribute класса и задает имя XML-элемента, созданное в XML-документе. |
Свойства
| Имя | Описание |
|---|---|
| Name |
Возвращает или задает имя XML-элемента. |
| Namespace |
Возвращает или задает пространство имен XML, созданное в XML-документе. |
| Order |
Возвращает или задает явный порядок сериализации или десериализации элементов. |
| 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) |