Json.Net с [WebMethod]s

Я пытаюсь заменить средство форматирования Json на Json.Net, поэтому я могу получать даты ISO вместо «/ Date (1379112467317) /»

Я также позволяю .Net (WebForms) автоматически обрабатывать сериализацию/десериализацию Json через [WebMethod]. Которые, похоже, не используют средство форматирования Json.Net.

В моем файле global.asax я вижу, как старый форматировщик MS Json удаляется, а новый форматировщик Json.net добавляется с помощью IsoDateTimeConverter.

Но мой [веб-метод] по-прежнему возвращается со старыми строками /Date()/ json вместо дат Iso. Нужно ли мне делать что-то особенное в моем файле global.asax, чтобы автомагия [Webmethod] использовала новый модуль форматирования?

Вот код в глобальном:

Как показано в: http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx

var formatter = config.Formatters.Where(f => { return f.SupportedMediaTypes.Any(v => v.MediaType.Equals("application/json", StringComparison.CurrentCultureIgnoreCase)); }).FirstOrDefault();

if (formatter != null)
{                    
    config.Formatters.Remove(formatter);
}

JsonSerializerSettings serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new IsoDateTimeConverter());
config.Formatters.Add(new JsonNetFormatter(serializerSettings));

person John McMillion    schedule 01.10.2013    source источник
comment
откуда вы знаете, что форматер вызывается и ваш ответ помечен как ответ приложения/json или нет в веб-форме?   -  person Stay Foolish    schedule 02.10.2013
comment
Я не уверен, вызывается ли мой форматер при вызове WebMethods. Вы знаете, как сказать? Я пока знаю только, что старый удаляется, а новый добавляется, проходя через него в App_Start. Ответ, приходящий по сети, - это JSON (а не XML).   -  person John McMillion    schedule 02.10.2013


Ответы (1)


Я думаю, что то, как вы настраиваете форматтер, мне подходит. но как убедиться, что он используется в веб-форме, это не происходит автоматически.

[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public Something GetSomething() {

}

как насчет того, чтобы попробовать это.

person Stay Foolish    schedule 01.10.2013
comment
На самом деле это происходит автоматически. Определенно верну JSON, это довольно зрелое приложение. Добавил это для удовольствия, тот же результат, что и /Date()/. Может быть, мне нужно настроить Json.net где-то еще, чтобы он возвращал даты Iso? В примерах, похоже, показано только обновление IsoDateTimeConverter(), и пошаговое выполнение, похоже, подбирает формат строки ISO внутри средства форматирования выше. Просто не применяется автоматически в веб-методах. - person John McMillion; 02.10.2013