XmlAttributeOverrides.Add 메서드

정의

XmlAttributes 개체를 XmlAttributes 개체 컬렉션에 추가합니다.

오버로드

Add(Type, XmlAttributes)

XmlAttributes 개체를 XmlAttributes 개체 컬렉션에 추가합니다. type 매개 변수는 XmlAttributes 개체로 재정의할 개체를 지정합니다.

Add(Type, String, XmlAttributes)

XmlAttributes 개체를 XmlAttributes 개체 컬렉션에 추가합니다. type 매개 변수는 재정의할 개체를 지정합니다. member 매개 변수는 재정의되는 멤버의 이름을 지정합니다.

Add(Type, XmlAttributes)

XmlAttributes 개체를 XmlAttributes 개체 컬렉션에 추가합니다. type 매개 변수는 XmlAttributes 개체로 재정의할 개체를 지정합니다.

public:
 void Add(Type ^ type, System::Xml::Serialization::XmlAttributes ^ attributes);
public void Add (Type type, System.Xml.Serialization.XmlAttributes attributes);
member this.Add : Type * System.Xml.Serialization.XmlAttributes -> unit
Public Sub Add (type As Type, attributes As XmlAttributes)

매개 변수

type
Type

재정의되는 개체의 Type입니다.

attributes
XmlAttributes

재정의 특성을 나타내는 XmlAttributes 개체입니다.

예제

다음 예제에서는 명명Orchestra된 클래스에서 파생된 클래스 Band 를 serialize합니다. 이 예제에서는 개체를 XmlRootAttribute 만들고 개체의 XmlAttributes 속성에 XmlRoot 할당합니다. 그런 다음 개체에 개체를 Add 추가하는 XmlAttributes 메서드를 호출하는 예제입니다 XmlAttributeOverrides .

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

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

ref class Band;
ref class Instrument;

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

[XmlInclude(Band::typeid)]
public ref class Orchestra
{
public:
   array<Instrument^>^Instruments;
};

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

public ref class Instrument
{
public:
   String^ Name;
};

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

   // An XmlRootAttribute allows overriding the Orchestra class.
   XmlRootAttribute^ xmlRoot = gcnew XmlRootAttribute;

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

   // Create an XmlAttributeOverrides object.
   XmlAttributeOverrides^ attrOverrides = gcnew XmlAttributeOverrides;

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

   // Create the XmlSerializer using the XmlAttributeOverrides.
   XmlSerializer^ s = gcnew XmlSerializer( Orchestra::typeid,attrOverrides );

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

   // Create the object using the derived class.
   Band^ band = gcnew Band;
   band->BandName = "NewBand";

   // Create an Instrument.
   Instrument^ i = gcnew Instrument;
   i->Name = "Trumpet";
   array<Instrument^>^myInstruments = {i};
   band->Instruments = myInstruments;

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

void DeserializeObject( String^ filename )
{
   XmlAttributes^ attrs = gcnew XmlAttributes;
   XmlRootAttribute^ attr = gcnew XmlRootAttribute;
   attrs->XmlRoot = attr;
   XmlAttributeOverrides^ attrOverrides = gcnew XmlAttributeOverrides;
   attrOverrides->Add( Orchestra::typeid, "Instruments", attrs );
   XmlSerializer^ s = gcnew XmlSerializer( Orchestra::typeid,attrOverrides );
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );

   // Deserialize the Band object.
   Band^ band = dynamic_cast<Band^>(s->Deserialize( fs ));
   Console::WriteLine( "Brass:" );
   System::Collections::IEnumerator^ myEnum = band->Instruments->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Instrument^ i = safe_cast<Instrument^>(myEnum->Current);
      Console::WriteLine( i->Name );
   }
}

int main()
{
   SerializeObject( "Override.xml" );
   DeserializeObject( "Override.xml" );
}
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);
      }
   }
}
Option Explicit
Option Strict

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

설명

개체에는 XmlAttributes 개체 XmlSerializer 집합에 대한 기본 serialization 동작을 재정의하는 특성 개체의 공용 구조체가 포함되어 있습니다. 재정의하려는 특정 동작에 따라 개체에 배치 XmlAttributes 할 특성 개체를 선택합니다. 예를 들어를 XmlSerializer 기본적으로 XML 요소로 클래스 멤버를 serialize 합니다. 대신 멤버를 XM 특성으로 직렬화하려면 생성XmlAttributeAttribute하고, 멤버의 XmlAttributes속성에 XmlAttribute 할당하고, 개체를 개체에 XmlAttributeOverrides 추가 XmlAttributes 합니다.

이 오버로드를 사용하여 또는 을 재정의 XmlRootAttribute 합니다 XmlTypeAttribute.

추가 정보

적용 대상

Add(Type, String, XmlAttributes)

XmlAttributes 개체를 XmlAttributes 개체 컬렉션에 추가합니다. type 매개 변수는 재정의할 개체를 지정합니다. member 매개 변수는 재정의되는 멤버의 이름을 지정합니다.

public:
 void Add(Type ^ type, System::String ^ member, System::Xml::Serialization::XmlAttributes ^ attributes);
public void Add (Type type, string member, System.Xml.Serialization.XmlAttributes attributes);
public void Add (Type type, string member, System.Xml.Serialization.XmlAttributes? attributes);
member this.Add : Type * string * System.Xml.Serialization.XmlAttributes -> unit
Public Sub Add (type As Type, member As String, attributes As XmlAttributes)

매개 변수

type
Type

재정의할 개체의 Type입니다.

member
String

재정의할 멤버의 이름입니다.

attributes
XmlAttributes

재정의 특성을 나타내는 XmlAttributes 개체입니다.

예제

다음 예제에서는 XmlAttributeAttribute 개체를 할당 합니다 XmlAttribute 의 속성을 XmlAttributes 개체. 그런 다음 개체를 XmlAttributes 만들기 전에 개체 XmlAttributeOverrides 에 추가하는 예제입니다 XmlSerializer.

// This is the class that will be serialized.
public ref class Group
{
public:
   String^ GroupName;

   [XmlAttributeAttribute]
   int GroupCode;
};

public ref class Sample
{
public:
   XmlSerializer^ CreateOverrider()
   {
      // Create an XmlAttributeOverrides object. 
      XmlAttributeOverrides^ xOver = gcnew XmlAttributeOverrides;

      /* Create an XmlAttributeAttribute to override the base class
            object's XmlAttributeAttribute object. Give the overriding object
            a new attribute name ("Code"). */
      XmlAttributeAttribute^ xAtt = gcnew XmlAttributeAttribute;
      xAtt->AttributeName = "Code";

      /* Create an instance of the XmlAttributes class and set the 
            XmlAttribute property to the XmlAttributeAttribute object. */
      XmlAttributes^ attrs = gcnew XmlAttributes;
      attrs->XmlAttribute = xAtt;

      /* Add the XmlAttributes object to the XmlAttributeOverrides
            and specify the type and member name to override. */
      xOver->Add( Group::typeid, "GroupCode", attrs );
      XmlSerializer^ xSer = gcnew XmlSerializer( Group::typeid,xOver );
      return xSer;
   }
};
// This is the class that will be serialized.
public class Group
{
   public string GroupName;
   [XmlAttribute]
   public int GroupCode;
}

public class Sample
{
public XmlSerializer CreateOverrider()
{
   // Create an XmlAttributeOverrides object.
   XmlAttributeOverrides xOver = new XmlAttributeOverrides();

   /* Create an XmlAttributeAttribute to override the base class
   object's XmlAttributeAttribute object. Give the overriding object
   a new attribute name ("Code"). */
   XmlAttributeAttribute xAtt = new XmlAttributeAttribute();
   xAtt.AttributeName = "Code";

   /* Create an instance of the XmlAttributes class and set the
   XmlAttribute property to the XmlAttributeAttribute object. */
   XmlAttributes attrs = new XmlAttributes();
   attrs.XmlAttribute = xAtt;

   /* Add the XmlAttributes object to the XmlAttributeOverrides
      and specify the type and member name to override. */
   xOver.Add(typeof(Group), "GroupCode", attrs);

   XmlSerializer xSer = new XmlSerializer(typeof(Group), xOver);
   return xSer;
}
}
' This is the class that will be serialized.
Public Class Group
    Public GroupName As String
    <XmlAttribute()> Public GroupCode As Integer
End Class

Public Class Sample
    
    Public Function CreateOverrider() As XmlSerializer
        ' Create an XmlAttributeOverrides object. 
        Dim xOver As New XmlAttributeOverrides()
        
        ' Create an XmlAttributeAttribute to override the base class
        ' object's XmlAttributeAttribute object. Give the overriding object
        ' a new attribute name ("Code").
        Dim xAtt As New XmlAttributeAttribute()
        xAtt.AttributeName = "Code"
        
        ' Create an instance of the XmlAttributes class and set the
        ' XmlAttribute property to the XmlAttributeAttribute object. 
        Dim attrs As New XmlAttributes()
        attrs.XmlAttribute = xAtt
        
        ' Add the XmlAttributes object to the XmlAttributeOverrides
        ' and specify the type and member name to override. 
        xOver.Add(GetType(Group), "GroupCode", attrs)
        
        Dim xSer As New XmlSerializer(GetType(Group), xOver)
        Return xSer
    End Function
End Class

설명

개체에는 XmlAttributes 개체 XmlSerializer 집합에 대한 기본 serialization 동작을 재정의하는 특성 개체의 공용 구조체가 포함되어 있습니다. 재정의하려는 특정 동작에 따라 개체에 배치 XmlAttributes 할 특성 개체를 선택합니다. 예를 들어를 XmlSerializer 기본적으로 XML 요소로 클래스 멤버를 serialize 합니다. 멤버를 XML 특성으로 직렬화하려면 해당 멤버를 만들어 XmlAttributeAttribute속성에 할당 XmlAttribute XmlAttributes하고 개체를 개체에 XmlAttributes XmlAttributeOverrides 추가합니다.

, XmlAttributeAttribute, XmlArrayItemAttributeXmlArrayAttribute또는 XmlIgnoreAttribute재정의를 시도할 때 이 메서드를 XmlElementAttribute사용합니다.

추가 정보

적용 대상