次の方法で共有


XmlAnyAttributeAttribute クラス

メンバ (XmlAttribute オブジェクトの配列を返すフィールド) に任意の XML 属性を含めることができるように指定します。

この型のすべてのメンバの一覧については、XmlAnyAttributeAttribute メンバ を参照してください。

System.Object
   System.Attribute
      System.Xml.Serialization.XmlAnyAttributeAttribute

<AttributeUsage(AttributeTargets.Property Or AttributeTargets.Field _
   Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue)>
Public Class XmlAnyAttributeAttribute   Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field
   | AttributeTargets.Parameter | AttributeTargets.ReturnValue)]
public class XmlAnyAttributeAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Property |
   AttributeTargets::Field | AttributeTargets::Parameter |
   AttributeTargets::ReturnValue)]
public __gc class XmlAnyAttributeAttribute : public Attribute
[JScript]
public
   AttributeUsage(AttributeTargets.Property | AttributeTargets.Field |
   AttributeTargets.Parameter | AttributeTargets.ReturnValue)
class XmlAnyAttributeAttribute extends Attribute

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

XML ドキュメントに含まれるメタデータなど、XML ドキュメントの一部として送信される可能性がある任意のデータを XML 属性として含めるには、 XmlAnyAttributeAttribute を使用します。

XmlAnyAttributeAttribute は、 XmlAttribute オブジェクトまたは XmlNode オブジェクトの配列を返すフィールドに適用します。 XmlSerializer クラスの Deserialize メソッドが呼び出されると、逆シリアル化対象のクラス内に対応するメンバがない属性はすべて、配列にまとめられます。逆シリアル化が終了したら、 XmlAttribute 項目のコレクションを反復処理して、データを処理できます。

XmlAnyAttributeAttribute をクラスのメンバに適用すると、 XmlSerializerUnknownNode イベントと UnknownAttribute イベントは発生しなくなります。

メモ   コードでは、 XmlAnyAttributeAttribute の代わりに XmlAnyAttribute という短い語を使用できます。

属性の使用方法については、「 属性を使用したメタデータの拡張 」を参照してください。

使用例

[Visual Basic, C#, C++] 不明な属性をすべて XmlAttribute オブジェクトの配列にまとめる例を次に示します。このサンプル コードを実行するには、次の XML を含んだ UnknownAttributes.xml という名前のファイルを作成します。

 
Imports System
Imports System.IO
Imports System.Xml.Serialization
Imports System.Xml

Public Class Group
   Public GroupName As String 
   ' The UnknownAttributes array will be used to collect all unknown
   ' attributes found when deserializing.
   <XmlAnyAttribute> _
    Public UnknownAttributes()As XmlAttribute
End Class

Public Class Test
   Shared Sub Main()
      Dim t  As Test = New Test()
      ' Deserialize the file containing unknown attributes.
      t.DeserializeObject("UnknownAttributes.xml")
   End Sub

   Private Sub DeserializeObject(filename As String)
      Dim ser As XmlSerializer = New XmlSerializer(GetType(Group))
      ' A FileStream is needed to read the XML document.
     Dim fs As FileStream = New FileStream(filename, FileMode.Open)
     Dim g As Group = CType(ser.Deserialize(fs), Group)
     fs.Close()
     ' Write out the data, including unknown attributes.
     Console.WriteLine(g.GroupName)
     Console.WriteLine("Number of unknown attributes: " & _ 
     g.UnknownAttributes.Length)
     Dim xAtt As XmlAttribute
     for each xAtt in g.UnknownAttributes
        Console.WriteLine(xAtt.Name & ": " & xAtt.InnerXml)
     Next
     ' Serialize the object again with the attributes added.
     Me.SerializeObject("AttributesAdded.xml",g)
   End Sub

   Private Sub SerializeObject(filename As String, g As object)
      Dim ser As XmlSerializer = New XmlSerializer(GetType(Group))
      DIm writer As TextWriter = New StreamWriter(filename)
      ser.Serialize(writer, g)
      writer.Close()
   End Sub
End Class

[C#] 
using System;
using System.IO;
using System.Xml.Serialization;
using System.Xml;

public class Group{
   public string GroupName;
   // The UnknownAttributes array will be used to collect all unknown
   // attributes found when deserializing.
   [XmlAnyAttribute]
    public XmlAttribute[]XAttributes;
}

public class Test{
   static void Main(){
      Test t = new Test();
      // Deserialize the file containing unknown attributes.

      t.DeserializeObject("UnknownAttributes.xml");
   }

   private void DeserializeObject(string filename){
      XmlSerializer ser = new XmlSerializer(typeof(Group));
      // A FileStream is needed to read the XML document.
     FileStream fs = new FileStream(filename, FileMode.Open);
     Group g = (Group) ser.Deserialize(fs);
     fs.Close();
     // Write out the data, including unknown attributes.
     Console.WriteLine(g.GroupName);
     Console.WriteLine("Number of unknown attributes: " + 
     g.XAttributes.Length);
     foreach(XmlAttribute xAtt in g.XAttributes){
     Console.WriteLine(xAtt.Name + ": " + xAtt.InnerXml);
     }
     // Serialize the object again with the attributes added.
     this.SerializeObject("AttributesAdded.xml",g);
   }

   private void SerializeObject(string filename, object g){
      XmlSerializer ser = new XmlSerializer(typeof(Group));
      TextWriter writer = new StreamWriter(filename);
      ser.Serialize(writer, g);
      writer.Close();
   }
}

[C++] 

#using <mscorlib.dll>
#using <System.dll>
#using <System.Xml.dll>

using namespace System;
using namespace System::Collections;
using namespace System::IO;
using namespace System::Xml::Serialization;
using namespace System::Xml;


public __gc class Group
{
public:
   String*        GroupName;

   // The UnknownAttributes array will be used to collect all unknown
   // attributes found when deserializing.
   [XmlAnyAttributeAttribute]
   XmlAttribute*    XAttributes[];
};

void SerializeObject(String* filename, Object* g)
{
   XmlSerializer* ser = new XmlSerializer(__typeof(Group));
   TextWriter* writer = new StreamWriter(filename);
   ser->Serialize(writer, g);
   writer->Close();
}

void DeserializeObject(String* filename)
{
   XmlSerializer* ser = new XmlSerializer( __typeof( Group ));

   // A FileStream is needed to read the XML document.
   FileStream* fs = new FileStream( filename, FileMode::Open );
   Group* g = __try_cast<Group*>( ser->Deserialize( fs ));
   fs->Close();

   // Write out the data, including unknown attributes.
   Console::WriteLine(g->GroupName);
   Console::WriteLine("Number of unknown attributes: {0}", __box(g->XAttributes->Length));


   for ( IEnumerator* e = g->XAttributes->GetEnumerator(); e->MoveNext(); )
   {
      XmlAttribute*    xAtt = __try_cast< XmlAttribute* >( e->Current );
      Console::WriteLine( S"{0}: {1}", xAtt->Name, xAtt->InnerXml );
   }
   // Serialize the object again with the attributes added.
   SerializeObject( S"AttributesAdded.xml", g );
}

int main()
{
   // Deserialize the file containing unknown attributes.
   DeserializeObject("UnknownAttributes.xml");
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Xml.Serialization

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Xml (System.Xml.dll 内)

参照

XmlAnyAttributeAttribute メンバ | System.Xml.Serialization 名前空間 | XmlAnyElementAttribute | XmlSerializer | XML シリアル化の概要