Web API / MVC数据绑定 - 消除歧义" null"来自"未提供"

时间:2015-03-02 04:42:13

标签: asp.net-mvc asp.net-web-api

让我们说服务器有一个带有可空属性的简单模型,如下所示:

public class Foo
{
    public int Id { get; set; }
    public decimal? Value { get; set; }
}

现在说客户A发布Foo模型的旧版本,当Foo没有Value属性时返回。

{ "id": 123 }

和客户B发布完整的Foo,因为其版本确实知道Value是什么。

{ "id": 123, "value": null }

由于MVC模型绑定器会看到缺少value密钥并将null分配给Foo.Value,因此对于使用此数据的人来说,该方案实际上是不明确的。考虑我是否将此数据发送到服务器以更新记录。我可能会null仅仅因为调用客户端对Value属性一无所知,而不是Value明确设置为null。 / p>

实际上,这是一个模型版本问题。但是,查看来自客户端A的原始JSON,很明显它不知道Value,它指示我保留Value属性的现有值。从客户B收到时,它会指示我将值更新为null,因为它是明确提供的。

有没有办法用Web API / MVC实现这一点,或者我最终必须做一些事情,比如明确定义并传入一个模型版本,这将允许服务器知道哪个" dialect"客户正在谈论的Foo

1 个答案:

答案 0 :(得分:0)

我建议将value设为object' rather than无效小数。这可以解决您的问题:

public class Foo
{
    public int Id { get; set; }
    public ValueObject Value { get; set; }
}

public class ValueObject
{
     public decimal? Value { get; set;}
}

这样,对于client A值,对象将为null client B内的ValueObject属性的值null将为{{1}}。