次の方法で共有


XmlAttributeOverrides.Add メソッド (Type, XmlAttributes)

XmlAttributes オブジェクトを XmlAttributes オブジェクトのコレクションに追加します。type パラメータは、 XmlAttributes オブジェクトによってオーバーライドされるオブジェクトを指定します。

Overloads Public Sub Add( _
   ByVal type As Type, _   ByVal attributes As XmlAttributes _)
[C#]
public void Add(Typetype,XmlAttributesattributes);
[C++]
public: void Add(Type* type,XmlAttributes* attributes);
[JScript]
public function Add(
   type : Type,attributes : XmlAttributes);

パラメータ

  • type
    オーバーライドされるオブジェクトの Type
  • attributes
    オーバーライドする側の属性を表す XmlAttributes オブジェクト。

解説

XmlAttributes オブジェクトには、属性オブジェクトの共用体があります。この属性オブジェクトに基づいて、オブジェクトの既定のシリアル化動作は XmlSerializer によってオーバーライドされます。オーバーライドする必要がある特定の動作に応じて、 XmlAttributes オブジェクトに配置する属性オブジェクトを選択します。たとえば、 XmlSerializer は、既定ではクラス メンバを XML 要素としてシリアル化します。メンバを XmlAttribute としてシリアル化する必要がある場合は、 XmlAttributeAttribute を作成し、それを XmlAttributesXmlAttribute プロパティに代入し、 XmlAttributes オブジェクトを XmlAttributeOverrides オブジェクトに代入します。

このオーバーロードは、 XmlRootAttribute または XmlTypeAttribute をオーバーライドするために使用します。

使用例

[Visual Basic, C#, C++] Orchestra という名前のクラスから派生した Band という名前のクラスをシリアル化する例を次に示します。この例では、 XmlRootAttribute オブジェクトを作成し、そのオブジェクトを XmlAttributes オブジェクトの XmlRoot プロパティに代入します。この例では、次に Add メソッドを呼び出して XmlAttributes オブジェクトを XmlAttributeOverrides オブジェクトに追加します。

 
Option Explicit
Option Strict

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


' This is the class that will be overridden. The XmlIncludeAttribute
' tells the XmlSerializer that the overriding type exists. 
<XmlInclude(GetType(Band))> _
Public Class Orchestra
    Public Instruments() As Instrument
End Class

' This is the overriding class.
Public Class Band
    Inherits Orchestra
    Public BandName As String
End Class

Public Class Instrument
    Public Name As String
End Class

Public Class Run
    
    Public Shared Sub Main()
        Dim test As New Run()
        test.SerializeObject("Override.xml")
        test.DeserializeObject("Override.xml")
    End Sub    
    
    Public Sub SerializeObject(ByVal filename As String)
        ' Each object that is being overridden requires
        ' an XmlAttributes object. 
        Dim attrs As New XmlAttributes()
        
        ' An XmlRootAttribute allows overriding the Orchestra class.
        Dim xmlRoot As New XmlRootAttribute()
        
        ' Set the object to the XmlAttribute.XmlRoot property.
        attrs.XmlRoot = xmlRoot
        
        ' Create an XmlAttributeOverrides object.
        Dim attrOverrides As New XmlAttributeOverrides()
        
        ' Add the XmlAttributes to the XmlAttributeOverrrides.
        attrOverrides.Add(GetType(Orchestra), attrs)
        
        ' Create the XmlSerializer using the XmlAttributeOverrides.
        Dim s As New XmlSerializer(GetType(Orchestra), attrOverrides)
        
        ' Writing the file requires a TextWriter.
        Dim writer As New StreamWriter(filename)
        
        ' Create the object using the derived class.
        Dim band As New Band()
        band.BandName = "NewBand"
        
        ' Create an Instrument.
        Dim i As New Instrument()
        i.Name = "Trumpet"
        Dim myInstruments() As Instrument = {i}
        band.Instruments = myInstruments
        
        ' Serialize the object.
        s.Serialize(writer, band)
        writer.Close()
    End Sub    
    
    Public Sub DeserializeObject(ByVal filename As String)
        Dim attrs As New XmlAttributes()
        Dim attr As New XmlRootAttribute()
        attrs.XmlRoot = attr
        Dim attrOverrides As New XmlAttributeOverrides()
        
        attrOverrides.Add(GetType(Orchestra), "Instruments", attrs)
        
        Dim s As New XmlSerializer(GetType(Orchestra), attrOverrides)
        
        Dim fs As New FileStream(filename, FileMode.Open)
        
        ' Deserialize the Band object.
        Dim band As Band = CType(s.Deserialize(fs), Band)
        Console.WriteLine("Brass:")
        
        Dim i As Instrument
        For Each i In  band.Instruments
            Console.WriteLine(i.Name)
        Next i
    End Sub
End Class


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

/* This is the class that will be overridden. The XmlIncludeAttribute 
tells the XmlSerializer that the overriding type exists. */

[XmlInclude(typeof(Band))]
public class Orchestra
{
   public Instrument[] Instruments;
}   

// This is the overriding class.
public class Band:Orchestra
{
   public string BandName;
}

public class Instrument
{
   public string Name;
}

public class Run
{
    public static void Main()
    {
       Run test = new Run();
       test.SerializeObject("Override.xml");
       test.DeserializeObject("Override.xml");
    }


    public void SerializeObject(string filename)
    {
      /* Each object that is being overridden requires 
      an XmlAttributes object. */
      XmlAttributes attrs = new XmlAttributes();

      // An XmlRootAttribute allows overriding the Orchestra class.
      XmlRootAttribute xmlRoot = new XmlRootAttribute();

      // Set the object to the XmlAttribute.XmlRoot property.
      attrs.XmlRoot = xmlRoot;

      // Create an XmlAttributeOverrides object.
      XmlAttributeOverrides attrOverrides = 
      new XmlAttributeOverrides();

      // Add the XmlAttributes to the XmlAttributeOverrrides.
      attrOverrides.Add(typeof(Orchestra), attrs);

      // Create the XmlSerializer using the XmlAttributeOverrides.
      XmlSerializer s = 
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      // Writing the file requires a TextWriter.
      TextWriter writer = new StreamWriter(filename);

      // Create the object using the derived class.
      Band band = new Band();
      band.BandName = "NewBand";

      // Create an Instrument.
      Instrument i = new Instrument();
      i.Name = "Trumpet";
      Instrument[] myInstruments = {i};
      band.Instruments = myInstruments;

      // Serialize the object.
      s.Serialize(writer,band);
      writer.Close();
   }

   public void DeserializeObject(string filename)
   {
      XmlAttributes attrs = new XmlAttributes();
      XmlRootAttribute attr = new XmlRootAttribute();
      attrs.XmlRoot = attr;
      XmlAttributeOverrides attrOverrides = 
         new XmlAttributeOverrides();

      attrOverrides.Add(typeof(Orchestra), "Instruments", attrs);

      XmlSerializer s = 
      new XmlSerializer(typeof(Orchestra), attrOverrides);

      FileStream fs = new FileStream(filename, FileMode.Open);

      // Deserialize the Band object.
      Band band = (Band) s.Deserialize(fs);
      Console.WriteLine("Brass:");

      foreach(Instrument i in band.Instruments) 
      {
         Console.WriteLine(i.Name);
      }
   }
}


[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml::Serialization;

public __gc class Band;
public __gc class Instrument;

/* This is the class that will be overridden. The XmlIncludeAttribute 
tells the XmlSerializer that the overriding type exists. */

[XmlInclude(__typeof(Band))]
public __gc class Orchestra
{
public:
   Instrument* Instruments[];
};   

// This is the overriding class.
public __gc class Band:public Orchestra
{
public:
   String* BandName;
};

public __gc class Instrument
{
public:
   String* Name;
};

void SerializeObject(String* filename)
{
   /* Each object that is being overridden requires 
   an XmlAttributes object. */
   XmlAttributes* attrs = new XmlAttributes();

   // An XmlRootAttribute allows overriding the Orchestra class.
   XmlRootAttribute* xmlRoot = new XmlRootAttribute();

   // Set the object to the XmlAttribute.XmlRoot property.
   attrs->XmlRoot = xmlRoot;

   // Create an XmlAttributeOverrides object.
   XmlAttributeOverrides* attrOverrides = 
      new XmlAttributeOverrides();

   // Add the XmlAttributes to the XmlAttributeOverrrides.
   attrOverrides->Add(__typeof(Orchestra), attrs);

   // Create the XmlSerializer using the XmlAttributeOverrides.
   XmlSerializer* s = 
      new XmlSerializer(__typeof(Orchestra), attrOverrides);

   // Writing the file requires a TextWriter.
   TextWriter* writer = new StreamWriter(filename);

   // Create the object using the derived class.
   Band* band = new Band();
   band->BandName = S"NewBand";

   // Create an Instrument.
   Instrument* i = new Instrument();
   i->Name = S"Trumpet";
   Instrument* myInstruments[] = {i};
   band->Instruments = myInstruments;

   // Serialize the object.
   s->Serialize(writer,band);
   writer->Close();
}

void DeserializeObject(String* filename)
{
   XmlAttributes* attrs = new XmlAttributes();
   XmlRootAttribute* attr = new XmlRootAttribute();
   attrs->XmlRoot = attr;
   XmlAttributeOverrides* attrOverrides = 
      new XmlAttributeOverrides();

   attrOverrides->Add(__typeof(Orchestra), S"Instruments", attrs);

   XmlSerializer* s = 
      new XmlSerializer(__typeof(Orchestra), attrOverrides);

   FileStream* fs = new FileStream(filename, FileMode::Open);

   // Deserialize the Band object.
   Band* band = dynamic_cast<Band*> (s->Deserialize(fs));
   Console::WriteLine(S"Brass:");

   System::Collections::IEnumerator* myEnum = band->Instruments->GetEnumerator();
   while (myEnum->MoveNext())
   {
      Instrument* i = __try_cast<Instrument*>(myEnum->Current);
      Console::WriteLine(i->Name);
   }
}

int main()
{
   SerializeObject(S"Override.xml");
   DeserializeObject(S"Override.xml");
}

[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 ファミリ

参照

XmlAttributeOverrides クラス | XmlAttributeOverrides メンバ | System.Xml.Serialization 名前空間 | XmlAttributeOverrides.Add オーバーロードの一覧 | XmlAttributes | XmlSerializer