public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
List<GraphSeries> serieses = obj as List<GraphSeries>;
if (serieses != null)
{
IDictionary<string, object> keyToValue = new Dictionary<string, object>();
ArrayList arrayList = new ArrayList();
int seriesesCount = serieses.Count;
if(seriesesCount >= 1)
{
int axisCount = serieses[0].Axis.Count;
//pre determine load type to save on speed
Action<Dictionary<string, object>, List<GraphSeries>, int>
populateColumns = this.populateColumnsOne;
Action<IDictionary<string, object>, List<GraphSeries>>
populateHeader = this.populateHeaderOne;
if (seriesesCount == 2)
{
populateColumns = this.populateColumnsTwo;
populateHeader = this.populateHeaderTwo;
}
if (seriesesCount == 3)
{
populateColumns = this.populateColumnsThree;
populateHeader = this.populateHeaderThree;
}
for (int i = 0; i < axisCount; i++)
{
Dictionary<string, object> dicRow = new Dictionary<string, object>();
populateColumns(dicRow, serieses, i);
arrayList.Add(dicRow);
}
populateHeader(keyToValue, serieses);
}
keyToValue.Add("Data", arrayList);
return keyToValue;
}
return new Dictionary<string, object>();
}