With Microsofts new extension methods it makes it easy to create helper methods that take care of the JSON grunt work. Listed below is an example of how to implement JSON extension methods.
using System.IO;
using System.Text;
using System.Collections;
using System.Runtime.Serialization.Json;
public static class ExtJsJsonHelper
{
public static string ToExtJsJson(this IEnumerable collection, string rootName)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(collection.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, collection);
StringBuilder sb = new StringBuilder();
sb.Append("{" + rootName + ":");
sb.Append(Encoding.Default.GetString(ms.ToArray()));
sb.Append("}");
return sb.ToString();
}
}
public static string ToExtJsJsonItem(this object item, string rootName)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, item);
StringBuilder sb = new StringBuilder();
sb.Append("{success:true," + rootName + ":");
sb.Append(Encoding.Default.GetString(ms.ToArray()));
sb.Append("}");
return sb.ToString();
}
}
public static string ToExtJsJsonItem(this object item)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, item);
StringBuilder sb = new StringBuilder();
sb.Append(Encoding.Default.GetString(ms.ToArray()));
return sb.ToString();
}
}
public static string ToExtJsJson(this IEnumerable collection, string rootName, string countName)
{
ICollection c = (ICollection)collection;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(c.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, c);
StringBuilder sb = new StringBuilder();
sb.Append("{" + countName + ":" + c.Count + ",");
sb.Append(rootName + ":");
sb.Append(Encoding.Default.GetString(ms.ToArray()));
sb.Append("}");
return sb.ToString();
}
}
public static T FromJsonTo<T>(this string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString));
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
}
}
public class GetAllCampaignsCommand : ICampaignServiceCommand
{
public string Execute(NameValueCollection nameValueCollection)
{
ICampaignRepository repository=new CampaignDatabaseDataContext();
List<Campaign> campaigns = repository.GetCampaigns();
List<CampaignDTO> campaignsdto= new List<CampaignDTO>();
foreach (Campaign c in campaigns)
{
campaignsdto.Add(c.ToDTO());
}
return campaignsdto.ToExtJsJson("items", "totalCount");
}
}