前回のSOの質問では、ASP.NET Web APIが(逆)シリアル化にネイティブに使用するJson.NETのシリアライザー設定を変更する方法を尋ねました。受け入れられた答えは完全に機能し、たとえば、シリアル化されたJSON文字列に型情報を埋め込むことができました。
ただし、このJSON文字列をモデルの親クラスを予期しているWeb APIアクションに戻そうとすると、Web APIは引き続き親クラスに逆シリアル化し、子クラスに対応するすべてのデータを削除し、子へのキャストと子の検出を防ぎます。クラス。
class Entity { }
class Person : Entity { }
public Person Get() {
return new Person();
}
public bool Post(Entity entity) {
return entity is Person;
}
単純なユースケースは、jQueryで次のようなことを行うことです。
// get a serialized JSON Person
$.ajax({
url : 'api/person' // PersonController
}).success(function (m) {
// then throw that Person right back via HTTP POST
$.ajax({
url : 'api/person',
type : 'POST',
data : m
}).success(function (m) {
console.log(m); // false
});
})
Json.NETのを変更してJsonSerializerSettings
型情報を埋め込むことで、それを読み取ることができ、少なくともその型に逆シリアル化を強制しようとすることを期待しますが、明らかにそうではありません。
このようなことにどのように取り組むべきですか?