Переопределите сериализацию DateTime для параметров ASP.NET WebMethod

Есть ли способ сделать это без использования циклов for или если условия

Нет, нет!

Использовать цикл. Это неизбежно на некотором уровне. Используя понимание списка:

res = [d['name'] for d in listOfDict if d['Age'] == '10']
8
задан Clyde 1 December 2008 в 20:47
поделиться

3 ответа

Хорошо, у меня действительно есть обходное решение для этого, которое зависит от того, что мне только на самом деле нужна часть Даты DateTime. Я присоединяю это свойство к каждому параметру Даты или DateTime в системе

<XmlElement(DataType:="date")> 

Это изменяет сгенерированный wsdl, чтобы иметь тип s:date вместо s:dateTime. (Обратите внимание, что просто наличие типа параметра метода.NET быть Датой, а не DateTime НЕ выполняло это). Таким образом, клиент теперь только отправляет часть даты DateTime, никакой информации времени, никакой информации о часовом поясе.

Если я когда-нибудь должен отправлять значение Даты и времени на сервер, я должен буду использовать некоторое другое обходное решение, как создание его строковый параметр.

2
ответ дан 5 December 2019 в 21:23
поделиться

Я часто имел дело с этим во многих приложениях, сервисах, и на различных платформах (.NET, Java, и т.д.). Полагайте мне, что Вы НЕ хотите долгосрочных последствий притворства, что Вы не заботитесь о часовом поясе. После преследования большого количества ошибок, которые являются чрезвычайно трудными и дорогими для фиксации, Вам жаль, что Вы не заботились.

Так, вместо того, чтобы разделять часовой пояс, необходимо или получить корректный часовой пояс или вызвать определенный часовой пояс. Если Вы обоснованно можете, зафиксировать различные источники данных для обеспечения корректного часового пояса. Если они находятся вне Вашего контроля, то вынуждают их или к зоне местного времени сервера или к UTC.

Общая промышленная конвенция состоит в том, чтобы вызвать все к UTC, и установить все производственные аппаратные часы на UTC (который означает серверы, сетевые устройства как маршрутизаторы, и т.д.). Затем необходимо перевести в зону местного времени пользователя в UI.

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

Обратите внимание, что это подобно распространенной проблеме со Строками: нет такой вещи как простой текст (Строка, лишенная кодировки символов) и нет такой вещи как плоскость (никакой часовой пояс) времени/даты. Притворство иначе является источником большого количества боли и страдания и смущающих ошибок.

4
ответ дан 5 December 2019 в 21:23
поделиться

У меня тоже были проблемы с информацией о часовом поясе. Проблема в том, что я уже предоставляю поля даты и времени в формате UTC. Затем происходит сериализация, и локальное смещение становится частью даты / времени. Дата и время для нашего поставщика в другом часовом поясе были сильно перепутаны. Я решил эту проблему, используя функцию преобразования tsql в полях datetime в моем операторе select, который я использовал для заполнения своих наборов данных. Это преобразовало поля в строковую переменную, которая автоматически преобразуется в значение datetime на стороне клиента. Если вы просто хотите передать дату, вы можете использовать код 101, чтобы указать только дату. Я использовал 126, чтобы указать дату и время именно так, как они отображаются в столбцах моей базы данных, с удаленной информацией о часовом поясе.

1
ответ дан 5 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: