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 ref class XClass
{
public:
/* Apply the XmlAnyElementAttribute to a field returning an array
of XmlElement objects. */
[XmlAnyElement]
array<XmlElement^>^AllElements;
};
public ref class Test
{
public:
void DeserializeObject( String^ filename )
{
// Create an XmlSerializer.
XmlSerializer^ mySerializer = gcnew XmlSerializer( XClass::typeid );
// To read a file, a FileStream is needed.
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
// Deserialize the class.
XClass^ x = dynamic_cast<XClass^>(mySerializer->Deserialize( fs ));
// Read the element names and values.
System::Collections::IEnumerator^ myEnum = x->AllElements->GetEnumerator();
while ( myEnum->MoveNext() )
{
XmlElement^ xel = safe_cast<XmlElement^>(myEnum->Current);
Console::WriteLine( "{0}: {1}", xel->LocalName, xel->Value );
}
}
};
int main()
{
Test^ t = gcnew Test;
t->DeserializeObject( "XFile.xml" );
}
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 вместо XmlElement и XmlNode.
Используйте для XmlAnyElementAttribute хранения произвольных данных (в виде XML-элементов), которые могут быть отправлены как часть XML-документа, например метаданные, отправляемые как часть документа.
Примените к XmlAnyElementAttribute полю, которое возвращает массив XmlElement объектов или XmlNode . Такое поле можно использовать двумя способами в зависимости от того, сериализуется или десериализуется объект. При сериализации объект создается в виде XML-элементов или узлов, даже если они не имеют соответствующих элементов (или членов) в сериализуемом объекте. Если при применении атрибута Name указать значение свойства, все XmlElement объекты или XmlNode , вставляемые в массив, должны иметь одинаковое имя элемента и пространство имен по умолчанию, в противном случае возникает исключение. Если задано Namespace значение свойства, необходимо также задать Name свойство , а XmlElement объекты или XmlNode также должны иметь одинаковые значения имени и пространства имен. Если значение не Name указано, XmlElement объекты или XmlNode могут иметь любое имя элемента.
При вызове Deserialize метода класса все элементы, не имеющие соответствующего члена в десериализуемом XmlSerializer объекте, собираются в массиве . После десериализации выполните итерацию по коллекции XmlElement элементов для обработки данных. Если указать Name значение, массив будет содержать только XML-элементы с таким именем. Если значение не указано Name , массив будет содержать все элементы, не имеющие соответствующего члена в классе . Если класс содержит несколько полей, к которым применяется атрибут, используйте Nameсвойства , или Name и Namespace , чтобы различать содержимое массивов. Если такой класс (с несколькими полями) также содержит одно поле, для которого во время десериализации не заданы значения отличительных свойств (другими словами, Name и Namespace), этот массив содержит все неизвестные ЭЛЕМЕНТЫ XML, которые еще не содержатся в других массивах. Если класс содержит несколько полей, для которых не задано различающееся Nameзначение , или Name и Namespace , поведение во время десериализации не указано.
Можно также применить XmlAnyElementAttribute к полю, которое возвращает один XmlElement объект. В этом случае необходимо использовать свойства и методы XmlElement класса для рекурсивной итерации по неизвестным элементам.
К члену XmlAnyElementAttribute класса можно применить несколько экземпляров , но каждый экземпляр должен иметь отдельное Name значение свойства. Или, если для каждого экземпляра задано одно и то же Name свойство, для каждого экземпляра должно быть задано отдельное Namespace значение свойства.
События UnknownNode и UnknownAttribute не возникают, XmlSerializer если применить XmlAnyElementAttribute к члену класса.
Примечание
Вы можете использовать слово XmlAnyElement
в коде вместо более длинного XmlAnyElementAttribute.
Дополнительные сведения об использовании атрибутов см. в разделе Атрибуты.
Конструкторы
XmlAnyElementAttribute() |
Инициализирует новый экземпляр класса XmlAnyElementAttribute. |
XmlAnyElementAttribute(String) |
Инициализирует новый экземпляр класса XmlAnyElementAttribute и указывает имя XML-элемента, сгенерированного в документе XML. |
XmlAnyElementAttribute(String, String) |
Инициализирует новый экземпляр класса XmlAnyElementAttribute и указывает имя XML-элемента, сгенерированного в документе 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) |