WebAPI - json结果中字段's名称的情况

本文关键字:情况 json 结果 字段 WebAPI | 更新日期: 2023-09-27 18:06:44

1)我有一个WebAPI方法,它返回对象User。该对象的所有字段在ajax调用的回调中以大写字母开头。我正在努力达到骆驼的效果。我不想在每个字段之前写[JsonProperty],但是ContractResolver = new CamelCasePropertyNamesContractResolver();不能正常工作。我不明白为什么。
2)在类UserList(见下文),我有一个链接到User。当我试图返回UserListUser作为WebAPI方法的结果,我得到一个关于"自我引用循环"的错误。但是我写的是构型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
        });

用户类:

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

WebAPI - json结果中字段's名称的情况

你的第一个问题的答案是简单地返回对象而不是Json(或者更正确-返回包含对象的HttpResponse)

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