自Json.NET JsonConverter反序列化Web.API参数不会被调用 [英] Custom Json.NET JsonConverter is not being called while deserializing Web.API parameter
问题描述
我有一个Web.API端点需要一个像这样的对象作为参数:
I have a Web.API endpoint that takes an object like this as a parameter:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public UserName UserName { get; set; }
}
例如:
[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
来我的世界 JsonFormatters
列表的.asax
I've added this JsonConverter
to my global list of JsonFormatters
in my Global.asax
:
// Automatically dsserialize JSON strings to UserNames
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new UserNameJsonDeserializer());
当我请求发送到我的Web.API,在 CanConvert
和 ReadJson
方法不会被调用。这是我如何打电话给我Web.API终点前我的JavaScript前端(使用jQuery):
When I send a request to my Web.API, the CanConvert
and ReadJson
methods are never called. This is how I'm calling my Web.API endpoint front my JavaScript frontend (using jQuery):
$.ajax({
type: 'POST',
url: 'api/person',
data: {
FirstName: 'First',
LastName: 'Last',
Age: 110,
UserName: 'UserName',
},
});
为什么我的自定义 JsonConverter
按Web.API被忽略?
Why is my custom JsonConverter
being ignored by Web.API?
推荐答案
让你的jQuery 阿贾克斯()
电话时,需要向您发送数据,JSON,否则反序列化的数据Web.API不会叫任何JSON相关的转换器。尝试添加JSON 的contentType
和 JSON.stringify
-ing你的数据
参数:
When making your jQuery .ajax()
call, you need to send you data as JSON, otherwise the Web.API won't call any JSON-related converters while deserializing the data. Try adding a JSON contentType
and JSON.stringify
-ing your data
parameter:
$.ajax({
type: 'POST',
url: 'api/person',
data: JSON.stringify({
FirstName: 'First',
LastName: 'Last',
Age: 110,
UserName: 'UserName'
}),
contentType: 'application/json; charset=utf-8'
});
这篇关于自Json.NET JsonConverter反序列化Web.API参数不会被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!