Обновить, как зарегистрировано форматтер
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Other stuff...
var jsonFormatter = new MyJsonFormatter();
config.Formatters.Clear();
config.Formatters.Insert(0, jsonFormatter);
//...
}
}
Убедитесь, что предложенный синтаксис соблюдается при запуске или там, где когда-либо запускается приложение.
// configure Web Api
GlobalConfiguration.Configure(WebApiConfig.Register);
Существует также процесс согласования контента, как предлагается в следующей статье
Поддержка только JSON в ASP.NET Web API - правильный путь
Адаптируя его к вашему примеру, он будет выглядеть как
public class JsonContentNegotiator : IContentNegotiator {
MediaTypeHeaderValue mediaType = MediaTypeHeaderValue.Parse("application/json;charset=utf-8");
private readonly MyJsonFormatter _jsonFormatter;
public JsonContentNegotiator(MyJsonFormatter formatter) {
_jsonFormatter = formatter;
}
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) {
var result = new ContentNegotiationResult(_jsonFormatter, mediaType);
return result;
}
}
И зарегистрирован против вашего HttpConfiguration
var jsonFormatter = new MyJsonFormatter();
config.Formatters.Clear();
config.Formatters.Insert(0, jsonFormatter);
//update content negotiation
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
Наконец, следует отметить, что фреймворк тесно связал свое JSON-форматирование с собственным JsonMediaTypeFormatter
/// <summary>
/// Gets the <see cref="MediaTypeFormatter"/> to use for Json.
/// </summary>
public JsonMediaTypeFormatter JsonFormatter
{
get { return Items.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); }
}
Справочный источник
Таким образом, в зависимости от того, какая часть конвейера фактически зависит от существования экземпляра JsonMediaTypeFormatter
, это, вероятно, повлияет на форматирование, связанное с JSON.
Если это действительно проблема, тогда я предлагаю взять из JsonMediaTypeFormatter
и переопределить его членов по мере необходимости.
public class MyJsonFormatter : JsonMediaTypeFormatter {
//... removed for brevity
}
Но это может повлечь за собой свои проблемы в зависимости от того, с чем связан этот базовый класс.