The best thing to do is configure your models and tell which properties should be mapped. Like this there won't be an overload of data. Using the ScriptIgnore attribute should work.
Example:
[Serialize]
public class Person{
public int ID {get;set;}
public virtual List<Role> Roles {get;set;}
//other properties
}
[Serialize]
public class Role{
public int ID {get;set;}
[ScriptIgnore]
public virtual List<Person> PersonsInRole {get;set;}
//other properties
}
In the example the roles for the user will be mapped, but the navigation property PersonsInRole of Role will not be serialized to prevent the overflow.
For the second question. the easiest way is just to use JSON.NET to serialize.