最近、私はJSON.netコントラクトリゾルバを使用できるようにコントローラクラスのJsonメソッドをオーバーライドしようとしている間に奇妙なシナリオを発見しました。最後にContentResultのオブジェクトを返し、それをActionResultにアップキャストした場合、これは完全に機能します。しかし、私はJSONResultのオブジェクトを返そうとするとうまくいきません。オーバーライドされたJsonメソッドからJSONResultを返すことができず、ContentResultが機能するのはなぜですか?
protected new ContentResult Json(object data, JsonRequestBehavior behaviour = JsonRequestBehavior.DenyGet)
{
var jsonSerializerSettings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
if (Request.RequestType == WebRequestMethods.Http.Get && behaviour == JsonRequestBehavior.DenyGet)
{
throw new InvalidOperationException("GET is not permitted for this request");
}
var jsonResult = new ContentResult
{
Content = JsonConvert.SerializeObject(data, jsonSerializerSettings),
ContentType = "application/json",
};
return jsonResult;
}
説明はありますか?
なぜですか?何が起こるのですか? – SLaks