让我们说服务器有一个带有可空属性的简单模型,如下所示:
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
?
答案 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}}。