【发布时间】:2015-10-30 12:04:21
【问题描述】:
1) 我有一个 WebAPI 方法,它返回对象 User。 ajax 调用回调中该对象的所有字段均以大写字母开头。我正在尝试在结果中实现 camelCase。我不想在每个字段之前写[JsonProperty],但ContractResolver = new CamelCasePropertyNamesContractResolver(); 不能正常工作。我不明白为什么。
2)在课堂UserList(见下文)我有一个指向User的链接。当我尝试返回 UserList 或 User 作为 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