Suchen
Aktuell
- Aktuell
- Kommentare
- TagCloud
- Windows Phone 7: Silverlight und XNA
- 1267769400 1267769400 - Keine Kommentare
- Empfehlung: Microsoft Arc Keyboard
- 1266747660 1266747660 - 2 Kommentare
- C#: Outlook like Pop-up Alert
- 1264008720 1264008720 - Keine Kommentare
- Windows Mobile 7 - Verschiedene Versionen geplant
- 1264007340 1264007340 - Keine Kommentare
- Windows Media Center: Pixelfehler am rechten Rand
- 1260208800 1260208800 - Keine Kommentare
- Das Outlook Fenster kann nicht geöffnet werden #2
- 1259409180 1259409180 - 14 Kommentare
- Bis jetzt sind noch keine Kommentare geschrieben worden
Randnotiz
W3C
- Keine Kommentare
C#: DataSet/DataTable zu JSON-String mit JavaScriptSerializer
Mittels JavaScriptSerializer lassen sich unter .Net ganz einfach Objekte in einen JSON String serialisieren. Jedoch gibt es bei DataSets und DataTables eine InvalidOperationException. Dies liegt daran, dass der JavaScriptSerializer keine DataTable serialisieren kann. Um das Problem zu umgehen, gibt es im Netz viele verschiedene Lösungen, wobei jedoch nur selten eine Funktioniert. Die beste und einfachste Möglichkeit besteht darin, eine JavaScriptConverter für DataTables selber zu schreiben. Wenn man nur Serialisieren will, und nicht Deserialisieren, geht das auch ziemlich einfach und schnell. Dazu benötigen wir eine neue Klasse, welche von JavaScriptConverter abgeleitet ist und die Serialize Methode überschreibt:
public class DataTableConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get { return new Type[] {typeof (DataTable)}; }
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DataTable listType = obj as DataTable;
if (listType != null)
{
Dictionary<string, object> result = new Dictionary<string, object>();
ArrayList itemsList = new ArrayList();
foreach (DataRow row in listType.Rows)
{
Dictionary<string, object> listDict = new Dictionary<string, object>();
foreach (DataColumn dc in listType.Columns)
listDict.Add(dc.ColumnName, row[dc]);
itemsList.Add(listDict);
}
result["Rows"] = itemsList; return result;
}
return new Dictionary<string, object>();
}
}
Jetzt noch den JavaScriptConverter in die Web.conf eintragen
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization >
<converters>
<add name="DataTableAjaxFix" type="Namespace.DataTableConverter"/>
</converters>
</jsonSerialization>
Beim erzeugen des JavaScriptSerializers muss der Converter vor dem eigentlichen Serialisieren noch an den JavaScriptSerializers über ConverterCollections mitgeteilt werden. Danach funktioniert das serialisieren einwandfrei.
Kommentare
- Bis jetzt sind noch keine Kommentare geschrieben worden



