XmlAttributes.XmlArray プロパティ
XmlSerializer が、配列を返すパブリック フィールドまたは読み書き可能プロパティをシリアル化する方法を指定するオブジェクトを取得または設定します。
Public Property XmlArray As XmlArrayAttribute
[C#]
public XmlArrayAttribute XmlArray {get; set;}
[C++]
public: __property XmlArrayAttribute* get_XmlArray();public: __property void set_XmlArray(XmlArrayAttribute*);
[JScript]
public function get XmlArray() : XmlArrayAttribute;public function set XmlArray(XmlArrayAttribute);
プロパティ値
配列を返すパブリック フィールドまたは読み書き可能プロパティをシリアル化する方法を指定する XmlArrayAttribute 。
解説
配列を返すパブリック フィールドまたは読み書き可能なパブリック プロパティを XmlSerializer でシリアル化する方法には 2 つあります。(1) 既定のシリアル化、および (2) 制御されたシリアル化です。
既定のシリアル化では、メンバに属性は適用されません。配列をシリアル化するときには、XML 要素のシーケンスが入れ子となってシリアル化されます。入れ子になったシーケンスの XML 要素名は、メンバ名に基づいて付けられます。
シリアル化をさらに詳細に制御するには、フィールドまたはプロパティに XmlArrayAttribute を適用します。たとえば、生成される XML 要素名を既定の名前とは異なった名前にする場合は、 ElementName プロパティを新しい値に設定します。
XmlArray プロパティによって、既定のシリアル化、およびメンバに XmlArrayAttribute を適用することによって制御されているシリアル化をオーバーライドできます。たとえば、既定のメンバ識別子の名前から生成された XML 要素名を新しい値に変更できます。また、メンバに XmlArrayAttribute を適用すると、 XmlArray プロパティに割り当てられている XmlArrayAttribute によりオーバーライドされます。
使用例
[Visual Basic, C#, C++] オブジェクトの配列を返す Members という名前のフィールドを含むクラスをシリアル化する例を次に示します。 XmlArrayAttribute を使用してフィールドのシリアル化をオーバーライドし、要素名を Staff に変更します。
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
' This is the class that will be serialized.
Public Class Group
' This field will be overridden.
Public Members() As Member
End Class
Public Class Member
Public MemberName As String
End Class
Public Class Run
Public Shared Sub Main()
Dim test As New Run()
test.SerializeObject("OverrideArray.xml")
test.DeserializeObject("OverrideArray.xml")
End Sub
' Return an XmlSerializer used for overriding.
Public Function CreateOverrider() As XmlSerializer
' Creating XmlAttributeOverrides and XmlAttributes objects.
Dim xOver As New XmlAttributeOverrides()
Dim xAttrs As New XmlAttributes()
' Add an override for the XmlArray.
Dim xArray As New XmlArrayAttribute("Staff")
xArray.Namespace = "http://www.cpandl.com"
xAttrs.XmlArray = xArray
xOver.Add(GetType(Group), "Members", xAttrs)
' Create the XmlSerializer and return it.
Return New XmlSerializer(GetType(Group), xOver)
End Function
Public Sub SerializeObject(ByVal filename As String)
' Create an instance of the XmlSerializer class.
Dim mySerializer As XmlSerializer = CreateOverrider()
' Writing the file requires a TextWriter.
Dim writer As New StreamWriter(filename)
' Create an instance of the class that will be serialized.
Dim myGroup As New Group()
' Set the object properties.
Dim m As New Member()
m.MemberName = "Paul"
myGroup.Members = New Member(0) {m}
' Serialize the class, and close the TextWriter.
mySerializer.Serialize(writer, myGroup)
writer.Close()
End Sub
Public Sub DeserializeObject(ByVal filename As String)
Dim mySerializer As XmlSerializer = CreateOverrider()
Dim fs As New FileStream(filename, FileMode.Open)
Dim myGroup As Group = CType(mySerializer.Deserialize(fs), Group)
Dim m As Member
For Each m In myGroup.Members
Console.WriteLine(m.MemberName)
Next m
End Sub
End Class
[C#]
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
// This is the class that will be serialized.
public class Group
{
// This field will be overridden.
public Member [] Members;
}
public class Member
{
public string MemberName;
}
public class Run
{
public static void Main()
{
Run test = new Run();
test.SerializeObject("OverrideArray.xml");
test.DeserializeObject("OverrideArray.xml");
}
// Return an XmlSerializer used for overriding.
public XmlSerializer CreateOverrider()
{
// Creating XmlAttributeOverrides and XmlAttributes objects.
XmlAttributeOverrides xOver = new XmlAttributeOverrides();
XmlAttributes xAttrs = new XmlAttributes();
// Add an override for the XmlArray.
XmlArrayAttribute xArray = new XmlArrayAttribute("Staff");
xArray.Namespace = "http://www.cpandl.com";
xAttrs.XmlArray = xArray;
xOver.Add(typeof(Group), "Members", xAttrs);
// Create the XmlSerializer and return it.
return new XmlSerializer(typeof(Group), xOver);
}
public void SerializeObject(string filename)
{
// Create an instance of the XmlSerializer class.
XmlSerializer mySerializer = CreateOverrider();
// Writing the file requires a TextWriter.
TextWriter writer = new StreamWriter(filename);
// Create an instance of the class that will be serialized.
Group myGroup = new Group();
// Set the object properties.
Member m = new Member();
m.MemberName = "Paul";
myGroup.Members = new Member[1] {m};
// Serialize the class, and close the TextWriter.
mySerializer.Serialize(writer, myGroup);
writer.Close();
}
public void DeserializeObject(string filename)
{
XmlSerializer mySerializer = CreateOverrider();
FileStream fs = new FileStream(filename, FileMode.Open);
Group myGroup = (Group)
mySerializer.Deserialize(fs);
foreach(Member m in myGroup.Members)
{
Console.WriteLine(m.MemberName);
}
}
}
[C++]
#using <mscorlib.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Serialization;
public __gc class Member
{
public:
String* MemberName;
};
// This is the class that will be serialized.
public __gc class Group
{
// This field will be overridden.
public:
Member* Members[];
};
// Return an XmlSerializer used for overriding.
XmlSerializer* CreateOverrider()
{
// Creating XmlAttributeOverrides and XmlAttributes objects.
XmlAttributeOverrides* xOver = new XmlAttributeOverrides();
XmlAttributes* xAttrs = new XmlAttributes();
// Add an override for the XmlArray.
XmlArrayAttribute* xArray = new XmlArrayAttribute(S"Staff");
xArray->Namespace = S"http://www.cpandl.com";
xAttrs->XmlArray = xArray;
xOver->Add(__typeof(Group), S"Members", xAttrs);
// Create the XmlSerializer and return it.
return new XmlSerializer(__typeof(Group), xOver);
}
void SerializeObject(String* filename)
{
// Create an instance of the XmlSerializer class.
XmlSerializer* mySerializer = CreateOverrider();
// Writing the file requires a TextWriter.
TextWriter* writer = new StreamWriter(filename);
// Create an instance of the class that will be serialized.
Group* myGroup = new Group();
// Set the object properties.
Member* m = new Member();
m->MemberName = S"Paul";
Member* temp[] = {m};
myGroup->Members = temp;
// Serialize the class, and close the TextWriter.
mySerializer->Serialize(writer, myGroup);
writer->Close();
}
void DeserializeObject(String* filename)
{
XmlSerializer* mySerializer = CreateOverrider();
FileStream* fs = new FileStream(filename, FileMode::Open);
Group* myGroup = dynamic_cast<Group*>(mySerializer->Deserialize(fs));
System::Collections::IEnumerator* myEnum = myGroup->Members->GetEnumerator();
while (myEnum->MoveNext())
{
Member* m = __try_cast<Member*>(myEnum->Current);
Console::WriteLine(m->MemberName);
}
}
int main()
{
SerializeObject(S"OverrideArray.xml");
DeserializeObject(S"OverrideArray.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 ファミリ
参照
XmlAttributes クラス | XmlAttributes メンバ | System.Xml.Serialization 名前空間