I think what you're asking is how to serialize complex business objects in json, but only expose certain properties.
In other words you already have a list of students, but you only want to send very specific data via json. If I'm wrong this answer won't suit your needs.
So assuming you have a list of students, with a projects property that has an inner property of tasks, this is how I do it without having to create loads of new classes, I use anonymous objects.
Once I've created my list of anonymous objects, I simply turn them into a json string.
As pointed out in the comments you don't need to use json.net, this functionality is available in the framework, add a reference to System.Web.Extensions.dll then
using System.Web.Script.Serialization;
var jsonStudents = new List
If you really want to use loops you can do this to allow you to do more complicated things in the creating of the projects and tasks: