2012-11-06 84 views
1

爲了澄清未使用Json.Net的活頁夾...... 配置我WebApiConfig像這樣:模型時,我發佈一個對象

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

這應該讓我派生類綁定基類。 當WebApi將對象序列化爲JSON並將它們發送給客戶端時,並且綁定器工作正常,但是當我將它們發回給服務器時,綁定器未被使用(BindToType方法從未被調用),並且我的對象被綁定到基類。

當我手動序列化/反序列化對象與此設置這一切工作正常。

任何想法?

回答

0

經過一番研究,我發現這是ASP.NET Web Api中的一個錯誤。當解析URL編碼參數時,它只是創建一個新的JsonSerializer(不傳遞全局設置)。

我在這裏提起它

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

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; 
} 
相關問題