C#: Objekte zu einem JSON String Serialisieren

Weil ich schon Mindestens 10 mal diese eine Klasse beu mir gesucht habe, schreibe ich sie jetzt hier auf!

Sinn und Zweck des ganzen ist es ein Objekt in einen String zu Serialisieren.
Da ich Aktuell JSON dem XML vorziehe Serialisiert die Klasse das Objekt vorzugsweise auch nach JSON 🙂

In den Verweisen muss hierfĂĽr eine Refezenz auf „System.Runtime.Serialization“ hinzugefĂĽgt werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Json;
 
namespace Classes
{
	public class JSON
	{
		public static T JSONDeserialise<T>(string json)
		{
			T obj = Activator.CreateInstance<T>();
			using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
			{
				DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
				obj = (T)serializer.ReadObject(ms);
				return obj;
			}
		}
 
		public static string JSONSerialize<T>(T obj)
		{
			DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
			using (MemoryStream ms = new MemoryStream())
			{
				serializer.WriteObject(ms, obj);
				return Encoding.Default.GetString(ms.ToArray());
			}
		}
	}
}

So… Mit dieser Klasse wollen wir jetzt auch mal ein Objekt Serialisieren und danach wieder einlesen (Deserialisieren).
HierfĂĽr habe ich mir eine kleine Klasse geschrieben, welche mein Daten-Objekt zum testen abbilden soll.

1
2
3
4
5
6
public class data
{
	public string Name { get; set; }
	public DateTime Birth { get; set; }
	public bool Deleted { get; set; }
}

In diesem Objekt gibt es einen String, ein DateTime und ein Bool um auch dem Umgang mit unterschiedlichen Datentypen zu demonstrieren.

Wollen wir nun ein Objekt dieser Klasse erstellen und dieses Serialisieren, sieht der Code wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
12
private void button1_Click(object sender, EventArgs e)
{
	// erst das Daten-Objekt erzeugen
	data DatenObj = new data();
	DatenObj.Name = "Sven Schmalle";
	DatenObj.Birth = new DateTime(1983, 05, 08);
	DatenObj.Deleted = false;
 
	// dann das Datenobjekt Serialisieren
	string JSONString = Classes.JSON.JSONSerialize<data>(DatenObj);
	textBox1.Text = JSONString;
}

Das Serialisierte Objekt (also der JSON-String, welcher das Daten-Objekt repräsentiert) wird nun in der TextBox „textBox1“ angezeigt.

Wollen wir aus diesem JSON-String nun wieder ein Objekt erstellen, so sieht der Code wie folgt aus:

1
2
3
4
5
private void button2_Click(object sender, EventArgs e)
{
	data DatenObj = Classes.JSON.JSONDeserialise<data>(textBox1.Text);
	propertyGrid1.SelectedObject = DatenObj;
}

Der JSON-String wird aus der TextBox geholt, in das Daten-Objekt Deserialisert und anschliĂźend im PropertyGrid angezeigt.
Das Ganze sieht dann in etwa so aus:

Das Beispiel habe ich auch im SVN Repo abgelegt und ist unter folgender URL zu finden:
http://code.google.com/p/frickelblog/source/browse/#svn%2Ftrunk%2Fsamples%2F20120309_JsonGeneric

leave your comment


*

UnterstĂĽtze den Frickelblog!