1) I have a WebAPI method, which returns object User. All fields of this object in callback of ajax call starting with uppercase. I'm trying to achieve camelCase in result. I do not want to write [JsonProperty] before each field, but ContractResolver = new CamelCasePropertyNamesContractResolver(); doesn't working properly. I can't understand why.
2) In class UserList (see below) i have a link to User. When i'm trying to return UserList or User as a result of WebAPI method i'm getting an error about "self referencing loop". But i've written in configuration
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; - why it's not working? And i do not want to write [JsonIgnore] in every such case.
WebApiConfig.cs:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
}
}
Returning User object from controller:
var user = Data.GetUserByUserName(userName);
return Json<object>(new
{
success = true,
user = user
});
User class:
public class User : BaseEntity
{
public string Login { get; set; }
public string Email { get; set; }
public List<UserList> UserLists { get; set; }
public string AvatarFileID { get; set; }
public int? AvatarFileProviderID { get; set; }
}