Json.Net不反序列化在使用表单数据发布时隐藏基本属性的派生对象

时间:2017-12-04 17:27:41

标签: asp.net-web-api json.net deserialization form-data

我有一个接受派生类的WebApi Controller方法:

    //Controller Method
    public IHttpActionResult Test(DerivedClass m)
    {
        return Ok(true);
    }

    //base class
    public class BaseClass
    {
        public int Id{ get; set; }
    }

    //derived class
    public class DerivedClass : BaseClass
    {
        public new int? Id { get; set; }
    }

我发布了Id = 1

如果我使用JSON数据类型POST到此控制器方法它工作正常(我得到一个Id = 1的对象),但如果我发送x-www-form-urlencoded数据,那么该对象为空。

现在,如果我将控制器方法更改为接受BaseClass并使用x-www-form-urlencoded数据,则该对象不为null(Id = 1)。另外,如果我修改Derived类并删除新的int?它的工作也很好。

这让我相信Json.Net没有将x-www-form-urlencoded数据反序列化为隐藏派生类属性的对象存在问题。有关如何解决的任何建议吗?

1 个答案:

答案 0 :(得分:0)

要考虑的一件事是,nullable int属性将具有与不可为空的不同的签名,因此如果您的意图可能实际上没有覆盖该属性。