澄清...我像这样配置我的webapiconfig:
config.Formatters.JsonFormatter.SerializerSettings.Binder = new TypeNameSerializationBinder("namespace.{0}, assembly");
config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
这应该允许我将派生的类绑定到基类。当WebAPI将对象序列到JSON并将其发送给客户端时,Binder确实可以工作,但是当我将它们发布回服务器时,粘合剂未使用(BindTotype方法永远不会被调用),并且我的对象被绑定到base类。/p>
当我使用此设置手动序列化/避免对象时,一切都很好。
有什么想法?
我试图用自定义的jsonConverters对复杂对象进行挑选时也有相同的问题。我需要这个,因为我正在使用DBGEOMETRY来存储用户位置。
我在这几天里摔断了头,我真的以为自己做错了什么,因为每次我在Web API上发布几何形状时,复杂的类型参数都会设置为null。这是在JSONCONVERTER完美地将JSON转换为填充对象的过程中。
我的解决方法是在下面写的。我不喜欢我不仅像我应该做的那样使用该参数。但最终起作用。
[HttpPost]
public MyComplexType SaveMyComplexType()
{
var json = Request.Content.ReadAsStringAsync().Result;
var myComplexType = JsonConvert.DeserializeObject<MyComplexType>(json);
//todo: validation and save to db
return myComplexType;
}
经过一些研究,我发现这是ASP.NET Web API中的一个错误。解析URL编码参数时,它只是创建一个新的Jsonserializer(不传递全局设置)。
我在这里提交了
http://aspnetwebstack.codeplex.com/workitem/609