Iは、以下のクラスは、MVCのWebアプリケーションのデフォルトよりも良好なJSONシリアライザ(省略無関係ビット)を提供すること、代替JsonResult
有し:そして私の 'カスタム' JsonDotNetResultにオプションの設定を提供するにはどうしたらいいですか?
public class JsonDotNetResult : JsonResult
{
public readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Arrays,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Converters = new List<JsonConverter> { new StringEnumConverter() }
};
public override void ExecuteResult(ControllerContext context)
{
...
var response = context.HttpContext.Response;
...
response.Write(JsonConvert.SerializeObject(Data, Settings));
}
}
IはController.Json
ための過負荷、として宣言さを有します。
protected JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior, JsonSerializerSettings settings = null)
が、私はJsonDotNetResult
のSettings
フィールドに設定され、既存のデフォルトの設定はありませんので、私は、発信者によって設定されたいくつかのプロパティで、新しいJsonSerializerSettings
に渡した場合、私は、すべてのプロパティが上書きされますSettings
オブジェクトのデフォルト値はJsonSerializerSettings
であり、呼び出し元から提供された新しい値が使用されます。後者が望まれ、前者は避けようとしている。
JsonSerializerSettings
プロパティ値のサブセットを渡して、のSettings
オブジェクトに適用するにはどうすればよいですか?私の最善の(そして最初の)努力は、デフォルトのSettings
オブジェクトのプロパティをループして、ユーザーが渡した新しいJsonSerializerSettings
オブジェクトのプロパティ値と比較し、異なる場合はSettings
の値をユーザー。