Предотвращение преобразования DateTime при передаче его клиенту AspNetCore.SignalR .Net - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь отправить запрос с сервера клиенту (.Net), работающему в среде, специфичной для конкретной культуры, которая влияет на даты в особом часовом поясе.

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

DateTime dateToSend = DateTime.SpecifyKind(serverSideDate, DateTimeKind.Unspecified);

Проблема в том, что при использовании JsonProtocol для клиента дата не конвертируется и обрабатывается правильно, а для MessagePackProtocol один и тот же код для клиентской и серверной сторон работает совершенно по-разному - он конвертирует дату в культурный часовой пояс клиента ...

Как предотвратить это преобразование, без некоторых хакерских решений, таких какпроходящая дата в виде строки.

ОБНОВЛЕНИЕ:
Как предположил Шон, я настроил MessagePack как на стороне клиента, так и на стороне сервера, но, к сожалению, он все еще не работает:

.AddMessagePackProtocol(options =>
    options.FormatterResolvers = new List<MessagePack.IFormatterResolver>()
    {
        StandardResolver.Instance,
        NativeDateTimeResolver.Instance
    })

1 Ответ

0 голосов
/ 12 октября 2018

Проблема в том, что вид теряется с MessagePackProtocol .

DateTime сериализуется в формат метки времени MessagePack, сериализует / десериализует UTC и теряет Kind информацию.

Примечание продолжает, говоря, что мы можем изменить это, используя вместо этого NativeDateTimeResolver (хотя и с некоторыми ограничениями).

Если вы используете NativeDateTimeResolver serialized native DateTime двоичный формат, и он может хранить Kind информацию, но не может взаимодействовать с другими платформами.

Как отмечают Крис и Панагиотис, лучше использовать DateTimeOffset.Официальная документация Microsoft гласит, что :

DateTimeOffset следует считать типом даты и времени по умолчанию для разработки приложений.

Существует также много полезногоинформация о сравнении StackOverflow DateTime и DateTimeOffset .

...