XmlAnyElementAttributes クラス
XmlAnyElementAttribute オブジェクトのコレクションを表します。
この型のすべてのメンバの一覧については、XmlAnyElementAttributes メンバ を参照してください。
System.Object
System.Collections.CollectionBase
System.Xml.Serialization.XmlAnyElementAttributes
Public Class XmlAnyElementAttributes
Inherits CollectionBase
[C#]
public class XmlAnyElementAttributes : CollectionBase
[C++]
public __gc class XmlAnyElementAttributes : public CollectionBase
[JScript]
public class XmlAnyElementAttributes extends CollectionBase
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
複数の XmlAnyElementAttribute オブジェクトの動作をまとめてオーバーライドするには、 XmlAnyElementAttributes を使用します。 XmlAnyElementAttribute クラスの複数のインスタンスは、各インスタンスに個別の Name プロパティ値が設定されていれば、1 つのクラス メンバに適用できます。これにより、指定された名前の要素の中に複数の不明な要素をまとめて、適切な配列に追加するように XmlSerializer に指示できます。このために、 XmlAnyElementAttribute クラスの複数のインスタンスを XmlAnyElementAttributes に追加できるようになっています。
複数の XmlAnyElementAttribute オブジェクトをまとめてオーバーライドするには、次の手順を実行します。
- XmlAnyElementAttributes を作成します。
- 一連の XmlAnyElementAttribute オブジェクトを作成し、 Add メソッドを使用して各オブジェクトをコレクションに追加します。
- XmlAttributes オブジェクトを作成します。
- XmlAnyElements プロパティに、 XmlAnyElementAttributes を設定します。
- XmlAttributeOverrides オブジェクトを作成します。
- Add メソッドを使用して、 XmlAttributes を XmlAttributeOverrides に追加します。
- XmlAttributeOverrides を使用して XmlSerializer のインスタンスを作成します。
- 一連の XmlAnyElementAttribute オブジェクトを格納しているオブジェクトをシリアル化または逆シリアル化します。
使用例
[Visual Basic, C#, C++] 新しい XmlAnyElementAttribute を作成し、その属性オブジェクトを、 XmlAnyElements プロパティからアクセスできるオブジェクトのコレクションに追加する例を次に示します。その後、 XmlAttributes を、 XmlSerializer を作成するために使用される XmlAttributeOverrides に追加します。作成された 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++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Xml.Serialization
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System.Xml (System.Xml.dll 内)