Vorgehensweise: Arbeiten mit Wörterbüchern mit LINQ to XML
Es ist häufig sinnvoll, verschiedene Datenstrukturen in XML und aus XML in andere Datenstrukturen umzuwandeln. In diesem Thema wird eine konkrete Implementierung dieser allgemeinen Herangehensweise gezeigt, bei der ein Dictionary<TKey, TValue> in XML umgewandelt und dann wieder zurückgewandelt wird.
Beispiel
Bei der C#-Version dieses Beispiels kommt eine Form einer funktionalen Konstruktion zum Einsatz, bei der eine Abfrage neue XElement-Objekte projiziert, woraufhin die sich dabei ergebende Auflistung als Argument an den Konstruktor des XElement-Objekts übergeben wird.
Die Visual Basic-Version dieses Beispiels verwendet XML-Literale und eine Abfrage in einem eingebetteten Ausdruck. Die Abfrage projiziert neue XElement-Objekte, die dann zum neuen Inhalt für das XElement-Stammobjekt werden.
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("Child1", "Value1");
dict.Add("Child2", "Value2");
dict.Add("Child3", "Value3");
dict.Add("Child4", "Value4");
XElement root = new XElement("Root",
from keyValue in dict
select new XElement(keyValue.Key, keyValue.Value)
);
Console.WriteLine(root);
Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)()
dict.Add("Child1", "Value1")
dict.Add("Child2", "Value2")
dict.Add("Child3", "Value3")
dict.Add("Child4", "Value4")
Dim root As XElement = _
<Root>
<%= From keyValue In dict _
Select New XElement(keyValue.Key, keyValue.Value) %>
</Root>
Console.WriteLine(root)
Dieser Code erzeugt die folgende Ausgabe:
<Root>
<Child1>Value1</Child1>
<Child2>Value2</Child2>
<Child3>Value3</Child3>
<Child4>Value4</Child4>
</Root>
Der folgende Code erstellt aus dem XML-Code ein Wörterbuch:
XElement root = new XElement("Root",
new XElement("Child1", "Value1"),
new XElement("Child2", "Value2"),
new XElement("Child3", "Value3"),
new XElement("Child4", "Value4")
);
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (XElement el in root.Elements())
dict.Add(el.Name.LocalName, el.Value);
foreach (string str in dict.Keys)
Console.WriteLine("{0}:{1}", str, dict[str]);
Dim root As XElement = _
<Root>
<Child1>Value1</Child1>
<Child2>Value2</Child2>
<Child3>Value3</Child3>
<Child4>Value4</Child4>
</Root>
Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)
For Each el As XElement In root.Elements
dict.Add(el.Name.LocalName, el.Value)
Next
For Each str As String In dict.Keys
Console.WriteLine("{0}:{1}", str, dict(str))
Next
Dieser Code erzeugt die folgende Ausgabe:
Child1:Value1
Child2:Value2
Child3:Value3
Child4:Value4