XmlAttributeOverrides.Add 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將 XmlAttributes 物件加入 XmlAttributes 物件的集合。
多載
Add(Type, XmlAttributes) |
將 XmlAttributes 物件加入 XmlAttributes 物件的集合。
|
Add(Type, String, XmlAttributes) |
將 XmlAttributes 物件加入 XmlAttributes 物件的集合。
|
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)
參數
- attributes
- XmlAttributes
表示覆寫屬性的 XmlAttributes 物件。
範例
下列範例會序列化名為 Band
的類別,此類別衍生自名為 的 Orchestra
類別。 此範例會 XmlRootAttribute 建立 物件,並將它指派給 XmlRoot 物件的 屬性 XmlAttributes 。 然後,此範例會 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 覆寫一組物件的預設序列化行為。 您可以選擇要放在 物件中的 XmlAttributes 屬性物件,視您想要覆寫的特定行為而定。 例如,預設會將 XmlSerializer 類別成員序列化為 XML 元素。 如果您想要將成員序列化為 XM 屬性,您可以改為建立 XmlAttributeAttribute 、將它指派給 XmlAttribute 的 XmlAttributes 屬性,並將物件 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)
參數
- 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 覆寫一組物件的預設序列化行為。 您可以選擇要放在 物件中的 XmlAttributes 屬性物件,視您想要覆寫的特定行為而定。 例如,預設會將 XmlSerializer 類別成員序列化為 XML 元素。 如果您想要將成員序列化為 XML 屬性,您可以改為建立 XmlAttributeAttribute 、將它指派給 XmlAttribute 的 XmlAttributes 屬性,並將物件新增 XmlAttributes 至 XmlAttributeOverrides 物件。
嘗試覆寫 XmlElementAttribute 、 XmlAttributeAttribute 、、 XmlArrayAttributeXmlArrayItemAttribute 或 XmlIgnoreAttribute 時,請使用這個方法。