Actually, as soon as I posted that it dawned on me that this might be how I have our formatter setup:
public object Read(Type type)
{
var model = _request.GetMethod() == HttpMethod.Post || _request.GetMethod() == HttpMethod.Put ?
Deserialize(type, _streaming.Input) : Activator.CreateInstance(type);
var requestData = !_formatterOptions.BindingSources.Any() ? _requestData :
new RequestData(_formatterOptions.BindingSources.Distinct().Select(x => _requestData.ValuesFor(x)));
_objectResolver.BindProperties(type, model, new BindingContext(requestData, _serviceLocator, new NulloBindingLogger()));
return model;
}
I am binding the properties right after I deserialize so I can see how this could overwrite. Still unsure why this worked before but not after we upgraded. I wonder if the object resolver checked to see if a value was already set before setting it and now it doesn't?