Generic Dictionary serialisieren

written by devangelist on August 5, 2012 in API and ASP.NET and JSON with one Comment

Besonders seit der Verbreitung vom jQuery Framework gibt es immer mehr Anwendungen die bspw. von Webservices, MVC Controller, etc. Gebrauch machen. Kurz gesagt: Möglichkeiten um Daten als JSON-strukturierte Wertepaare zurückzugeben.

Dafür sollte es serverseitig immer die dazugehörigen Klassen geben, damit das .NET-Framework die Daten immer schön serialisieren bzw. deserialisieren kann. Doch in manchen Fällen (sollten natürlich Ausnahmen sein) kann es Sinn machen, die Daten auf severseitiger Ebene nicht als Klassen vorgegeben zu haben und zwar genau dann, wenn sich die Struktur häufig ändert. Einfaches Beispiel dafür wäre die Erweiterung einer Eigenschaft. Dafür bietet sich ein Dictionary nahezu perfekt an, als Key/Value Struktur, wobei der Value alles mögliche sein kann. Kommt eine neue Eigenschaft hinzu, kann diese über den neuen Key abgefragt werden.

Als Beispiel wird ein Webservice angesprochen, welcher quasi als Eierlegende Wollmilchsau dient (ich wiederhole: gut überlegt, Gottobjekt, Anti-Pattern…). Dabei gibt es Parameter, die immer vorhanden sind und welche, die sich pro Aufruf ändern können (options).

{action: 'list', type: 'customers', options: {refresh: true, items: 10}}

Leider gibt es im .NET-Framework keine Möglichkeit ein solches generisches Dictionary zu serialisieren, somit muss auf Alternativen zurückgegriffen werden. Als Beispiel kann das Newtonsoft.JSON Framework verwendet werden, welches nicht nur generische Dictionaries serialisieren kann, sondern auch von der Performance in manchen Fällen schneller als das im .NET-Framework eingebaute ist.

Einfach die DLL in das Projekt als Referenz einbinden oder über Nuget installieren.
Der ASP.NET Webservice sieht dann wie folgt aus:

public object GodWebservice(Action action, WebserviceType type, string options)
{
    var keyValues = JsonConvert.DeserializeObject<string, object>(options);
    var refresh = keyValues["refresh"];
}
Generic Dictionary serialisieren: 1 Stern2 Sterne3 Sterne4 Sterne5 Sterne 4,00 von 5 Punkte, 1 abgegebene Stimmen.
Loading ... Loading ...

About the Author

Roberto Bez ist passionierter Webentwickler und TechLead bei der HolidayCheck AG. Für Roberto bedeutet das Entwickeln nicht nur Arbeit, sondern auch Freude, Motivation und täglich neue, aufregende Herausforderungen. Besonders gerne setzt er sich mit neuen Webtechnologien sowie Datenbanken aller Art auseinander und versucht diese in die tägliche Anwendungsentwicklung miteinzubringen. Neben dem Entwickeln trifft man ihn gerne Abends beim Laufen oder im Sommer bei Mountainbike-Touren durch die schönen Berge Südtirols.