__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%向后兼容的人。 –