1

为了澄清......我像这样配置我的 WebApiConfig:

config.Formatters.JsonFormatter.SerializerSettings.Binder = new TypeNameSerializationBinder("namespace.{0}, assembly");
config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;

这应该允许我将派生类绑定到基类。当 WebApi 将对象序列化为 JSON 并将它们发送到客户端时,活页夹确实有效,但是当我将它们发回服务器时,活页夹没有被使用(永远不会调用 BindToType 方法),并且我的对象被绑定到基类。

当我使用此设置手动序列化/反序列化对象时,一切正常。

有任何想法吗?

4

2 回答 2

1

尝试使用自定义 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;
}
于 2013-02-03T19:21:58.433 回答
0

经过一番研究,我发现这是 ASP.NET Web Api 中的一个错误。当解析 url 编码的参数时,它只是创建一个新的 JsonSerializer(不传递全局设置)。

我在这里归档

http://aspnetwebstack.codeplex.com/workitem/609

于 2012-11-07T13:37:26.537 回答