I am using C# in Visual Studio 2010 and creating a WCF service.
[
{
"QuizCategory":"Basic Skills",
"QuizID":["1","2"],
"QuizShortName":["Career","Beginner"]
},
{
"QuizCategory":"General",
"QuizID":["3","4"],
"QuizShortName":["General","General # 2"]
}
]
I am getting the above results in json result, but I need to show like below result, like dictionary by dictionary:
[
{
"QuizCategory":"Basic Skills",
Subclasses:
[
{
"QuizID":1,"QuizShortName":"Career"
},
{
"QuizID":2,
"QuizShortName":"Beginner"
}
]
},
{
"QuizCategory":"General",
Subclasses:
[
{
"QuizID":3,
"QuizShortName":"General"
},
{
"QuizID":4,
"QuizShortName":"General#2"
}
]
}
]
StringBuilder jsonResult = new StringBuilder();
List lstCNAInfo = new List();
using (RestDataContext dc = new RestDataContext())
{
CNAClassInfo objCNAInfo;
var records = dc.GetCNAClasses(Status);
foreach (var rec in records)
{
ArrayList listQID = new ArrayList();
ArrayList listQSN = new ArrayList();
String[] splitQID = rec.QuizId.Split(',');
String[] splitQSN = rec.QuizShortName.Split('$');
foreach (var varlist in splitQSN)
{
listQSN.Add(varlist);
}
foreach (var varlist in splitQID)
{
listQID.Add(varlist);
}
objCNAInfo = new CNAClassInfo();
objCNAInfo.QuizCategory = rec.QuizCat;
objCNAInfo.QuizID = listQID;
objCNAInfo.QuizShortName = listQSN;
lstCNAInfo.Add(objCNAInfo);
}
}
//Json serialzer
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<CNAClassInfo>));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, lstCNAInfo);
jsonResult.Append(Encoding.Default.GetString(ms.ToArray()));
ms.Close();
return jsonResult.ToString();
}
If it’s serializing the response as you have shown is simply because that’s how your class structure looks like.
If you want to get the expected output, make sure your structure looks like this:
And when you serialize it, you serialize a
List<Category>, which will contain one Category object per Quiz Category.