WebAPI - json 结果中字段名称的大小写

WebAPI - case of field's names in json result

1) 我有一个 WebAPI 方法,它 return 对象 User。 ajax 调用回调中此对象的所有字段均以大写字母开头。我试图在结果中实现驼峰命名法。我不想在每个字段前写 [JsonProperty],但是 ContractResolver = new CamelCasePropertyNamesContractResolver(); 不能正常工作。我不明白为什么。
2) 在 class UserList 中(见下文)我有一个 link 到 User。当我尝试 return UserListUser 作为 WebAPI 方法的结果时,我收到有关 "self referencing loop" 的错误。但是我已经写在配置中 config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; - 为什么它不起作用?而且我不想在每种情况下都写 [JsonIgnore]

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; 
    }
}

从控制器返回 User 对象:

var user = Data.GetUserByUserName(userName);

return Json<object>(new
        {
            success = true,
            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; }
}

第一个问题的答案是 return 对象而不是 Json(或者更正确 - return 包含对象的 HttpResponse)

第二个问题的答案:不要将您的原始模型发送给客户端,而是使用 ViewModels 并仅传递需要的属性(例如,在前端您可能只需要用户名,而不是整个用户对象)