Если я верну объект, содержащий свойство DateTime, из веб-метода, это будет префикс метода с аннотацией данных
[WebMethod]
эта дата будет сериализована примерно так
"/Date(1365776562553)/"
вместо строки в формате iso-8601, например
"2013-04-12T19:59:53.2422758+05:30"
Если бы я мог изменить сериализатор для веб-методов с JsonDataContractSerializer на NewtonSoft Json Serializer, даты были бы исправлены.
Как?
Я не буду сериализовать вручную или писать javascripts, которые используют строки даты в первом формате.
Поиск в Google, который я сделал до сих пор, направляет меня только на страницы, где предлагается любой из этих обходных путей.
Вы можете добавить строковое свойство к классу, например date_iso, и заполнить его правильным форматом строки даты.
Или сделайте возвращаемый тип пустым и напишите строку json в контекст.
Запись строки json в контекст не только выполнит сериализацию вручную (как я не хотел), но также добавит недостатка возврата void, когда вы концептуально возвращаете что-то непустое.
Превращение свойства в строку отбросит тип, который добавляет зла.
@ AndersLindén вы используете WCF Rest? 4.0? 4.5? Зачем вообще использовать WCF Rest? Есть повторяющиеся вопросы, но решение - это просто нет - вы можете либо создать TextResponse, содержащий строку JSON в каждом методе, либо создать собственный форматировщик сообщений. Учитывая возраст стека, вы увидите, что повторяющиеся вопросы SO исчезнут после 2012 года и веб-API.
Возможный дубликат Как установить Json.Net в качестве сериализатора по умолчанию для службы WCF REST
@PanagiotisKanavos Я использую .NET Framework 4.5. Это ответ? Я действительно хочу вернуть сам объект, который использую, а не заключать его в объект типа TextResponse или в строку. Я очень хочу решить эту проблему настройкой. Я согласен с тем, что связанный с повторяющимся кандидатом действительно является дубликатом, но в принятом ответе предлагается использовать общий тип возврата и сериализовать вручную.
@ AndersLindén Я разместил ссылки два. Один раз показывает, как отформатировать строку в каждом действии, другой - как сделать это глобально с помощью специального средства форматирования сообщений. Почему вы используете такую старую технологию? WCF Rest никогда не был чем-то большим, чем временная мера на пути к MVC и веб-API.
У нас есть старый проект, использующий веб-формы. На самом деле у нас есть несколько контроллеров веб-API в этом проекте, которые я мог бы использовать. Суть использования WebMethods в том, что вы можете привязать их к внутреннему коду, что делает их менее зависимыми от других функций. Тогда файл aspx может быть самодостаточным с помощью веб-методов.
@ AndersLindén, ты говоришь о веб-методах AJAX? Пожалуйста, объясните, что вы делаете, и используйте правильные теги! Даже люди, которые имеют использовали эти штуки, не должны помнить стеки 10-летней давности.
@ AndersLindén, и это проблема - эта технология настолько устарела, что сейчас трудно найти какую-либо информацию о форматировании.
Я согласен с вами в этом.
Возможно, этот вопрос никому не будет полезен, поэтому я мог бы закрыть его. webforms не так уж и плох, если вы дополните его web api 2 и angularjs (даже если он старый).
Я до сих пор использую эту технологию. Короткий ответ - вы не можете вернуть сам объект. В какой-то момент вам придется изменить дату. Не совсем уверен в сериализаторе по умолчанию, но я думаю, что вы сможете использовать .Net JavascriptSerializer в коде позади. Я не помню, что это делает с датой, возможно, вам все равно придется его обновить.





WebMethod- это атрибут, используемый для старых атрибутов ASMX МЫЛО, которые были заменены WCF еще в 2005 году. Это не атрибут аннотации данных. Эти службы все равно не могут вернуть JSON.JsonDataContractSerializer- это класс WCF, а DataContractSerializer - это сериализатор, используемый WCF. Какой стек вы действительно используете? Возможно, WCF Rest?