XmlAnyElementAttribute 类

定义

指定成员(返回 XmlElementXmlNode 对象的数组的字段)可以包含对象,该对象表示在序列化或反序列化的对象中没有相应成员的所有 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 返回 对象数组的名为 AllElementsXmlElement 字段。

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 及更高版本时,请使用 XElementXNode 代替 XmlElementXmlNode

XmlAnyElementAttribute使用 包含任意数据 (作为 XML 元素) ,这些元素可作为 XML 文档的一部分发送,例如作为文档的一部分发送的元数据。

XmlAnyElementAttribute 应用于返回 或 XmlNode 对象的数组的XmlElement字段。 此类字段可通过两种方式使用,具体取决于对象是序列化还是反序列化对象。 序列化后,对象将生成为 XML 元素或节点,即使它们没有相应的成员 (或正在序列化的对象中) 成员。 如果在应用特性时指定 Name 属性值,则插入数组中的所有 XmlElementXmlNode 对象必须具有相同的元素名称和默认命名空间,否则将引发异常。 如果设置 Namespace 属性值,还必须设置 Name 属性,并且 XmlElementXmlNode 对象还必须具有相同的名称和命名空间值。 如果未 Name 指定任何值,则 XmlElementXmlNode 对象可以具有任何元素名称。

调用 Deserialize 类的 XmlSerializer 方法时,将在数组中收集正在反序列化的对象中没有相应成员的所有元素。 反序列化后,循环访问项集合 XmlElement 以处理数据。 如果指定值 Name ,则数组仅包含具有该名称的 XML 元素。 如果不指定 Name 值,则数组包含类中没有相应成员的所有元素。 如果类包含多个应用了 特性的字段,请使用 Name、 或 NameNamespace 属性来区分数组的内容。 如果此类 (具有多个字段) 还包含一个字段,该字段没有 (设置 (的属性值, Name 并在 Namespace 反序列化期间) ,则此数组包含其他数组中尚未包含的任何未知 XML 元素。 如果类包含的多个字段未设置区分 Name、 或 NameNamespace 值,则未指定反序列化期间的行为。

还可以将 应用于 XmlAnyElementAttribute 返回单个 XmlElement 对象的字段。 如果这样做,则必须使用 类的属性和方法 XmlElement 以递归方式循环访问未知元素。

可以将 的 XmlAnyElementAttribute 多个实例应用于一个类成员,但每个实例必须具有不同的 Name 属性值。 或者,如果为每个实例设置了相同的 Name 属性,则必须为每个实例设置不同的 Namespace 属性值。

UnknownNode如果将 应用于类的成员,XmlSerializerXmlAnyElementAttribute则 不会发生 的 和 UnknownAttribute 事件。

注意

可以在代码中使用 单词 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)

适用于

另请参阅