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

Siehe auch

Konzepte

Projektionen und Transformationen (LINQ to XML)