次の方法で共有


XmlAttributes.XmlAnyElements プロパティ

XmlAnyElementAttribute オブジェクトのコレクションを取得します。

Public ReadOnly Property XmlAnyElements As XmlAnyElementAttributes
[C#]
public XmlAnyElementAttributes XmlAnyElements {get;}
[C++]
public: __property XmlAnyElementAttributes* get_XmlAnyElements();
[JScript]
public function get XmlAnyElements() : XmlAnyElementAttributes;

プロパティ値

XmlAnyElementAttribute オブジェクトのコレクションを表す XmlAnyElementAttributes オブジェクト。

解説

XmlAnyElementAttribute は、逆シリアル化時に、 XmlElement オブジェクトの配列を返すメンバに適用できます。これにより、 XmlSerializer は、逆シリアル化されているオブジェクト内に対応するメンバを持っていない属性を逆シリアル化できるようになります。このため、これらの要素は、 XmlSerializer に対しては "不明" になります。これは、XML ストリームが XML Web サービスによって変更された可能性がある場合、またはランダム データが常に XML ストリームと共に含まれることが判明している場合に役立ちます。

XmlAnyElements プロパティによって、メンバのシリアル化をオーバーライドして、 XmlAnyElementAttribute が適用されたメンバとして機能するようにできます。

使用例

[Visual Basic, C#, C++] 新しい XmlAnyElementAttribute オブジェクトを作成し、そのオブジェクトを XmlAnyElements プロパティをとおしてアクセスしたオブジェクトのコレクションに追加する例を次に示します。その後、 XmlAttributes オブジェクトを XmlAttributeOverrides オブジェクトに追加し、これを使用して XmlSerializer オブジェクトを作成します。XmlSerializer は、オブジェクトのシリアル化または逆シリアル化に使用されます。 XmlAnyElementAttributes プロパティを使用するときの効果を確認するには、Main メソッド内で SerializeObject メソッドを実行することによって、"UnknownElements.xml" という名前の XML ドキュメントを作成します。結果として作成されたドキュメントを編集して、その他の (不明な) 要素を含めます。Main メソッド内の SerializeObject 呼び出しをコメント行に変更し、 DeserializeObject メソッドの呼び出しはコメントから外します。これにより、不明な XML 要素の名前と値が出力されます。

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

Public Class Group
   Public GroupName As String 
   <XmlAnyElement> _
   Public Things () As object
End Class

Public Class Test
   Shared Sub Main()
      Dim t As Test = New Test()
      ' 1 Run this and create the XML document.
      ' 2 Add New elements to the XML document.
      ' 3 Comment out the New line, and uncomment
      ' the DeserializeObject line to deserialize the
      ' XML document and see unknown elements.
     t.SerializeObject("UnknownElements.xml")
     
      't.DeserializeObject("UnknownElements.xml")
   End Sub

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

   
   Private Sub DeserializeObject(filename As String)

      Dim ser As XmlSerializer = CreateOverrideSerializer()
      ' 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()
     Console.WriteLine(g.GroupName)
     Console.WriteLine(g.Things.Length)
     Dim xelement As XmlELement
     for each xelement in g.Things
        Console.WriteLine(xelement.Name &": " & xelement.InnerXml)
     next
   End Sub
   

   Private Function CreateOverrideSerializer() As XmlSerializer 
      Dim myAnyElement As XmlAnyElementAttribute = _
      New XmlAnyElementAttribute()
      Dim xOverride As XmlAttributeOverrides = _
      New XmlAttributeOverrides()
      Dim xAtts As XmlAttributes = New XmlAttributes()
      xAtts.XmlAnyElements.Add(myAnyElement)
      xOverride.Add(GetType(Group), "Things", xAtts)
      return New XmlSerializer(GetType(Group) , xOverride)
   End Function
End Class

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

public class Group{
   public string GroupName;
   [XmlAnyElement]
   public object[]Things;

}

public class Test{
   static void Main(){
      Test t = new Test();
      // 1 Run this and create the XML document.
      // 2 Add new elements to the XML document.
      // 3 Comment out the new line, and uncomment
      // the DeserializeObject line to deserialize the
      // XML document and see unknown elements.
      t.SerializeObject("UnknownElements.xml");
     
      // t.DeserializeObject("UnknownElements.xml");
   }

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

   
   private void DeserializeObject(string filename){

      XmlSerializer ser = CreateOverrideSerializer();
      // A FileStream is needed to read the XML document.
      FileStream fs = new FileStream(filename, FileMode.Open);
     Group g = (Group)
         ser.Deserialize(fs);
     fs.Close();
     Console.WriteLine(g.GroupName);
     Console.WriteLine(g.Things.Length);
     foreach(XmlElement xelement in g.Things){
     Console.WriteLine(xelement.Name + ": " + xelement.InnerXml);
     }
   }

   private XmlSerializer CreateOverrideSerializer(){
      XmlAnyElementAttribute myAnyElement = 
      new XmlAnyElementAttribute();
      XmlAttributeOverrides xOverride = 
      new XmlAttributeOverrides();
      XmlAttributes xAtts = new XmlAttributes();
      xAtts.XmlAnyElements.Add(myAnyElement);
      xOverride.Add(typeof(Group), "Things", xAtts);
      return new XmlSerializer(typeof(Group) , xOverride);
   }
}

[C++] 

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

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

public __gc class Group
{
public:
   String* GroupName;

   [XmlAnyElement]
   Object* Things[];

};

void SerializeObject(String* filename);
void DeserializeObject(String* filename);
XmlSerializer* CreateOverrideSerializer();

int main()
{
   // 1 Run this and create the XML document.
   // 2 Add new elements to the XML document.
   // 3 Comment out the next line, and uncomment
   // the DeserializeObject line to deserialize the
   // XML document and see unknown elements.
   SerializeObject(S"UnknownElements.xml");

   // DeserializeObject(S"UnknownElements.xml");
}

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


void DeserializeObject(String* filename)
{

   XmlSerializer* ser = CreateOverrideSerializer();
   // 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();
   Console::WriteLine(g->GroupName);
   Console::WriteLine(g->Things->Length);
   for ( int i = 0; i < g->Things->Length; ++i )
   {
      XmlElement* xelement = __try_cast<XmlElement*>( g->Things[i] );
      Console::WriteLine( S"{0}: {1}", xelement->Name, xelement->InnerXml );
   }
}

XmlSerializer* CreateOverrideSerializer()
{
   XmlAnyElementAttribute* myAnyElement = new XmlAnyElementAttribute();
   XmlAttributeOverrides* xOverride = new XmlAttributeOverrides();
   XmlAttributes* xAtts = new XmlAttributes();
   xAtts->XmlAnyElements->Add(myAnyElement);
   xOverride->Add(__typeof(Group), S"Things", xAtts);
   return new XmlSerializer(__typeof(Group) , xOverride);
}

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

必要条件

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

参照

XmlAttributes クラス | XmlAttributes メンバ | System.Xml.Serialization 名前空間 | XmlAnyAttribute