Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化Web.API参数时未调用自定义Json.NET JsonConverter_C#_Jquery_Ajax_Asp.net Web Api_Asp.net Web Api2 - Fatal编程技术网

C# 反序列化Web.API参数时未调用自定义Json.NET JsonConverter

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

我有一个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: '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相关的转换器。尝试添加一个JSON
contentType
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ɴᴀᴍ - 不用担心!:)