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 UserList
或 User
作为 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 并仅传递需要的属性(例如,在前端您可能只需要用户名,而不是整个用户对象)
1) 我有一个 WebAPI 方法,它 return 对象 User
。 ajax 调用回调中此对象的所有字段均以大写字母开头。我试图在结果中实现驼峰命名法。我不想在每个字段前写 [JsonProperty]
,但是 ContractResolver = new CamelCasePropertyNamesContractResolver();
不能正常工作。我不明白为什么。
2) 在 class UserList
中(见下文)我有一个 link 到 User
。当我尝试 return UserList
或 User
作为 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 并仅传递需要的属性(例如,在前端您可能只需要用户名,而不是整个用户对象)