JSON serializer Generic extension

Работая над своим мелким проектом на Silverlight 4, пришла в голову мысль скрестить Extension Methods и Generics.
Получилось замечательно.

Ведь на самом деле, зачем писать метод расширения для конкретного объекта если можно это сделать для Generic классов. В этом случае мы получаем расширенные методы для всего множества имеющихся классов.

JsonExtension.cs
[CSharp]
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

namespace JsonGenericExtExample
{
public static class JsonExtension
{
///

/// Сериализовать объект в Json строку
///

/// Объект /// строка содержащая сериализованный обеъкт в формате Json
public static string GetJson(this T data) where T : class
{
string result;
using (var stream = new MemoryStream())
{
var serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(stream, data);
var reader = new StreamReader(stream);
stream.Position = 0;
result = reader.ReadToEnd();
}
return result;
}

///

/// Десериализация объекта из Json строки
///

/// Тип результирующего объекта
/// Json строка /// Десериализованный объект
public static T Get(this string data) where T : class
{
var deserializer = new DataContractJsonSerializer(typeof(T));

using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
stream.Position = 0;
return deserializer.ReadObject(stream) as T;
}
}
}
}

[/CSharp]

Для использования достаточно вызвать созданный ранее метод.
[CSharp]
// создаем тестовый экземпляр типом User
var CurrentUser = new User
{
FirstName = «Карим»,
LastName = «Офигенов»,
Age = 124
};
// вызываем extension метод у экземпляра для сериализации в JSON
string jsonString = CurrentUser.GetJson();

// Десериализуем
var DeserializedUser = jsonString.Replace(«Карим»,»Макар»).Get();
[/CSharp]
Использование этих методов очень простое, мало того они теперь будут у всех типов объектов в проекте.

Скриншот тестового приложения

Исходники проекта