__type
字段是DataContractJaonSerializer
(DCJS)的一個功能,具體來說就是ASP的功能。對於配置了enableWebScript
行爲的端點,NET AJAX兼容性。更具體地說,通過將DataContractSerilizerSettings::EmitTypeInformation
屬性設置爲AsNeeded
或Always
來控制此功能。
開箱即用的WebAPI必然會使用JSON.NET作爲JSON媒體的格式化程序,雖然它支持與TypeNameHandling
功能類似的概念,但它與DCJS不兼容。
現在可以切換的WebAPI使用DCJS很容易,像這樣:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;
但是仍然不會幫你,因爲DCJS情況下,他們在內部創建在這些情況下不與EmitTypeInformatiom
配置,這意味着他們默認爲None
。
因此,唯一的解決方案,得到你想要的是寫自己的MediaTypeFormatter
子類,創建/配置其DCJS實例與EmitTypeInformation
設置你想,然後註冊一個處理JSON的媒體類型,而不是建立在JsonMediaTypeFormatter 。幸運的是,自ASP。 NET Web API是開源的,你應該能夠複製the existing implementation並且很容易調整它以適應這個特定的情況。
嗨德魯,謝謝你的回答 - 我實際上最後自己設法回答了它(下面) - 客戶端代碼能夠從JSON.NET中處理$ type,而不是__type,所以我爲此付出了努力。 – trembler2003
很高興聽到它。希望我的回答能夠幫助那些可能需要保持100%向後兼容的人。 –