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


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
Атрибуты

Примеры

В следующем примере применяется 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)

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

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