【问题标题】:WebAPI - case of field's names in json resultWebAPI - json 结果中字段名称的情况
【发布时间】:2015-10-30 12:04:21
【问题描述】:

1) 我有一个 WebAPI 方法,它返回对象 User。 ajax 调用回调中该对象的所有字段均以大写字母开头。我正在尝试在结果中实现 camelCase。我不想在每个字段之前写[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; }
}

【问题讨论】:

    标签: c# json asp.net-web-api json.net deserialization


    【解决方案1】:

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

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

    【讨论】:

    • 关于第二个问题:在这种情况下,模型只包含所需的数据......我认为复制类只是为了获得单独的视图模型并不是更好的解决方案。无论如何,序列化无法正常工作。
    • 当我将 json 更改为简单地返回对象时,第二个问题也消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多