自Json.NET JsonConverter反序列化Web.API参数不会被调用 [英] Custom Json.NET JsonConverter is not being called while deserializing Web.API parameter

查看:174
本文介绍了自Json.NET JsonConverter反序列化Web.API参数不会被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆