title: Web API/MVC Data Binding - Disambiguate "null" from "not provided"
body: <p>Let's say the server has a simple model with a nullable property like this:</p>
  
  <pre><code>public class Foo
  {
      public int Id { get; set; }
      public decimal? Value { get; set; }
  }
  </code></pre>
  
  <p>Now say Client A POSTs an old version of the <code>Foo</code> model, back when <code>Foo</code> did not have the <code>Value</code> property.</p>
  
  <pre><code>{ "id": 123 }
  </code></pre>
  
  <p>and Client B POSTs the complete <code>Foo</code> because its version does know what <code>Value</code> is.</p>
  
  <pre><code>{ "id": 123, "value": null }
  </code></pre>
  
  <p>Because the MVC model binder will see the absence of the <code>value</code> key and assign <code>null</code> to <code>Foo.Value</code>, the scenario is effectively ambiguous to someone consuming this data. Consider if I was sending this data up to the server to update a record. I could potentially <code>null</code> out values simply because the calling client didn't know anything about the <code>Value</code> property, as opposed to <code>Value</code> being explicitly set to <code>null</code>.</p>
  
  <p>Effectively this is a model versioning issue. However, looking at the raw JSON from Client A it's obvious that it didn't know about <code>Value</code>, which instructs me to retain the existing value of the <code>Value</code> property. When received from Client B, it instructs me to update the value to <code>null</code> because it is explicitly provided.</p>
  
  <p>Is there any way to accomplish this with Web API/MVC, or will I end up having to do something like explicitly define and pass in a model version that will allow the server to know which "dialect" of <code>Foo</code> that a client is talking?</p>