Измените сериализатор для WebMethod с JsonDataContractSerializer на NewtonSoft Json Serializer

Если я верну объект, содержащий свойство DateTime, из веб-метода, это будет префикс метода с аннотацией данных

[WebMethod]

эта дата будет сериализована примерно так

"/Date(1365776562553)/"

вместо строки в формате iso-8601, например

"2013-04-12T19:59:53.2422758+05:30"

Если бы я мог изменить сериализатор для веб-методов с JsonDataContractSerializer на NewtonSoft Json Serializer, даты были бы исправлены.

Как?

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

Поиск в Google, который я сделал до сих пор, направляет меня только на страницы, где предлагается любой из этих обходных путей.

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

Вы можете добавить строковое свойство к классу, например date_iso, и заполнить его правильным форматом строки даты.

VDWWD 27.11.2018 11:50

Или сделайте возвращаемый тип пустым и напишите строку json в контекст.

VDWWD 27.11.2018 12:19

Запись строки json в контекст не только выполнит сериализацию вручную (как я не хотел), но также добавит недостатка возврата void, когда вы концептуально возвращаете что-то непустое.

Anders Lindén 27.11.2018 12:46

Превращение свойства в строку отбросит тип, который добавляет зла.

Anders Lindén 27.11.2018 12:46

@ AndersLindén вы используете WCF Rest? 4.0? 4.5? Зачем вообще использовать WCF Rest? Есть повторяющиеся вопросы, но решение - это просто нет - вы можете либо создать TextResponse, содержащий строку JSON в каждом методе, либо создать собственный форматировщик сообщений. Учитывая возраст стека, вы увидите, что повторяющиеся вопросы SO исчезнут после 2012 года и веб-API.

Panagiotis Kanavos 27.11.2018 14:11

@PanagiotisKanavos Я использую .NET Framework 4.5. Это ответ? Я действительно хочу вернуть сам объект, который использую, а не заключать его в объект типа TextResponse или в строку. Я очень хочу решить эту проблему настройкой. Я согласен с тем, что связанный с повторяющимся кандидатом действительно является дубликатом, но в принятом ответе предлагается использовать общий тип возврата и сериализовать вручную.

Anders Lindén 27.11.2018 14:23

@ AndersLindén Я разместил ссылки два. Один раз показывает, как отформатировать строку в каждом действии, другой - как сделать это глобально с помощью специального средства форматирования сообщений. Почему вы используете такую ​​старую технологию? WCF Rest никогда не был чем-то большим, чем временная мера на пути к MVC и веб-API.

Panagiotis Kanavos 27.11.2018 14:25

У нас есть старый проект, использующий веб-формы. На самом деле у нас есть несколько контроллеров веб-API в этом проекте, которые я мог бы использовать. Суть использования WebMethods в том, что вы можете привязать их к внутреннему коду, что делает их менее зависимыми от других функций. Тогда файл aspx может быть самодостаточным с помощью веб-методов.

Anders Lindén 27.11.2018 14:28

@ AndersLindén, ты говоришь о веб-методах AJAX? Пожалуйста, объясните, что вы делаете, и используйте правильные теги! Даже люди, которые имеют использовали эти штуки, не должны помнить стеки 10-летней давности.

Panagiotis Kanavos 27.11.2018 14:37

@ AndersLindén, и это проблема - эта технология настолько устарела, что сейчас трудно найти какую-либо информацию о форматировании.

Panagiotis Kanavos 27.11.2018 14:44

Я согласен с вами в этом.

Anders Lindén 27.11.2018 14:47

Возможно, этот вопрос никому не будет полезен, поэтому я мог бы закрыть его. webforms не так уж и плох, если вы дополните его web api 2 и angularjs (даже если он старый).

Anders Lindén 27.11.2018 14:49

Я до сих пор использую эту технологию. Короткий ответ - вы не можете вернуть сам объект. В какой-то момент вам придется изменить дату. Не совсем уверен в сериализаторе по умолчанию, но я думаю, что вы сможете использовать .Net JavascriptSerializer в коде позади. Я не помню, что это делает с датой, возможно, вам все равно придется его обновить.

wazz 28.11.2018 16:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
15
133
0

Другие вопросы по теме