C# 反序列化Web.API参数时未调用自定义Json.NET JsonConverter
我有一个Web.API端点,它将这样的对象作为参数:C# 反序列化Web.API参数时未调用自定义Json.NET JsonConverter,c#,jquery,ajax,asp.net-web-api,asp.net-web-api2,C#,Jquery,Ajax,Asp.net Web Api,Asp.net Web Api2,我有一个Web.API端点,它将这样的对象作为参数: public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public UserName UserName { get; set; } } $.ajax({ type: 'POST', url: 'ap
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public UserName UserName { get; set; }
}
$.ajax({
type: 'POST',
url: 'api/person',
data: JSON.stringify({
FirstName: 'First',
LastName: 'Last',
Age: 110,
UserName: 'UserName'
}),
contentType: 'application/json; charset=utf-8'
});
例如:
[Route("api/person")]
[AcceptVerbs("POST")]
public void UpdatePerson(Person person)
{
// etc.
}
我已经定义了一个自定义JsonConverter,用于将JSON字符串属性转换为我的自定义用户名
类:
public class UserNameJsonDeserializer : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(UserName);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return new UserName((string)reader.Value);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanRead { get { return true; } }
public override bool CanWrite { get { return false; } }
}
我已将此JsonConverter
添加到我的global.asax中的JsonFormatters
全局列表中:
// Automatically dsserialize JSON strings to UserNames
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new UserNameJsonDeserializer());
当我向Web.API发送请求时,不会调用CanConvert
和ReadJson
方法。这就是我如何将Web.API端点前端调用为JavaScript前端(使用jQuery):
为什么Web.API会忽略我的自定义JsonConverter
?在进行jQuery.ajax()
调用时,您需要将数据作为JSON发送给您,否则Web.API在反序列化数据时不会调用任何与JSON相关的转换器。尝试添加一个JSONcontentType
和JSON。stringify
-设置数据
参数:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public UserName UserName { get; set; }
}
$.ajax({
type: 'POST',
url: 'api/person',
data: JSON.stringify({
FirstName: 'First',
LastName: 'Last',
Age: 110,
UserName: 'UserName'
}),
contentType: 'application/json; charset=utf-8'
});
@FᴀʀʜᴀɴAɴᴀᴍ - 不知道你的意思,我是说你回答了你自己的问题?这是一篇提示文章吗?@FᴀʀʜᴀɴAɴᴀᴍ - 看哦,我明白了,第一次遇到这个东西。:)@FᴀʀʜᴀɴAɴᴀᴍ - 不用担心!:)