当我发布对象时,json.net的模型粘合剂不使用



澄清...我像这样配置我的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

相关内容

  • 没有找到相关文章

最新更新