Ziel dieses HowTo’s ist es, mehrere Daten aus einem Service (hier in dem Beispiel aus einem Mock) via LINQ in eine XML zu schreiben (serialisieren).
Die XML soll folgendermaßen aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Localization>
<Module id="Customers">
<CultureCode>de-DE</CultureCode>
<Key>General</Key>
<Value>Allgemein</Value>
</Module>
<Module id="Customers">
<CultureCode>en-EN</CultureCode>
<Key>General</Key>
<Value>General</Value>
</Module>
<Module id="Customers">
<CultureCode>de-DE</CultureCode>
<Key>Customer</Key>
<Value>Kunde</Value>
</Module>
</Localization> |
Dazu inizialisiere ich mir zu erst den Datenpool, in diesem Fall benutze ich eine Klasse die mir ein paar Mock-Objekte bereitstellt.
1
| LocalizationServiceMock lm = new LocalizationServiceMock(); |
Dann erstelle ich mir das erste XML Element “Localization”, welches weitere Elemente beinhalten soll.
1
| XElement moduleElement = new XElement("Localization"); |
Nun iteriere ich durch die Liste von Objekten die ich von meinem Mock bekomme und füge dem oben erstellten “moduleElement” die Daten aus dem Mock, als jeweils neues Element hinzu.
1
2
3
4
5
6
7
8
9
| foreach (LocalizationServiceMock.TranslatedString translatedString in lm.GetTranslatedStrings())
{
moduleElement.Add(new XElement("Module", new XAttribute("id", translatedString.Module),
new XElement("CultureCode", translatedString.CultureCode),
new XElement("Key", translatedString.Key),
new XElement("Value", translatedString.Value)
)
);
} |
Zum Schluss wird das Ganze noch in ein XDocument geschrieben
1
2
3
4
| var localizationService = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
moduleElement
); |
und gespeichert:
1
| localizationService.Save("Services/LocalizationService.xml"); |
Fertig sieht das folgendermaßen aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public void WriteXml()
{
LocalizationServiceMock lm = new LocalizationServiceMock();
XElement moduleElement = new XElement("Localization");
foreach (LocalizationServiceMock.TranslatedString translatedString in lm.GetTranslatedStrings())
{
moduleElement.Add(new XElement("Module", new XAttribute("id", translatedString.Module),
new XElement("CultureCode", translatedString.CultureCode),
new XElement("Key", translatedString.Key),
new XElement("Value", translatedString.Value)
)
);
}
var localizationService = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
moduleElement
);
localizationService.Save("Services/LocalizationService.xml");
} |
Viel Spass beim entwickeln : )