この__type
フィールドはDataContractJaonSerializer
(DCJS)の機能であり、特にASP用にあります。適用された動作で構成されたエンドポイントのNETAJAX互換性enableWebScript
。さらに具体的には、この機能はDataContractSerilizerSettings::EmitTypeInformation
プロパティをAsNeeded
またはに設定することで制御されますAlways
。
箱から出して、WebAPIはJSONメディアのフォーマッターとしてJSON.NETを使用するようにバインドされており、そのTypeNameHandling
機能で同様の概念をサポートしていますが、DCJSとのワイヤー互換性はありません。
これで、次のようにWebAPIを切り替えてDCJSを非常に簡単に使用できるようになります。
GlobalConfiguration.Configuration.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;
ただし、これらの場合に内部で作成されるDCJSインスタンスは構成されていないため、それでも役に立ちません。EmitTypeInformatiom
つまり、デフォルトで。になりますNone
。
したがって、必要なものを取得する唯一の解決策はMediaTypeFormatter
、DCJSインスタンスを作成/構成する独自のサブクラスを作成しEmitTypeInformation
、それを登録して、組み込みのJsonMediaTypeFormatterではなくJSONメディアタイプを処理することです。幸いなことにASP以来。NET Web APIはオープンソースであるため、既存の実装をコピーして、この特定のケースに合わせて非常に簡単に調整できるはずです。