Временная метка с C#, Dapper, Npgsql и jsonC#

Место общения программистов C#
Ответить
Anonymous
 Временная метка с C#, Dapper, Npgsql и json

Сообщение Anonymous »

У меня есть функция, возвращающая json, содержащая метку времени. Когда я выполняю его в pgAdmin, я получаю json типа
{..., "time_created":"2024-05-15T11:14:23.384266+00:00",...}.

Но когда я выполняю ту же функцию на C# с помощью ExecuteScalar, возвращаемое значение похоже на
{..., "time_created":"2024-05-15T09:14:23.384266+02:00",...}

Она ведет себя одинаково, даже если функция возвращает json, преобразованный в текст заранее. Обратите внимание, что временные метки преобразуются в часовой пояс сервера и смещение времени сервера, если оно добавлено. Это невозможно отобразить в элементах управления Quasar без изменений.
Что заставляет ExecuteScalar выполнять преобразование, даже если из функции возвращается текст?Если функция возвращает таблицу, содержащую метку времени, значения возвращаются правильно, а сериализация создает значения в форме, например: "time_created":"2024-05-15T11:14:23.384266Z", который можно нормально отобразить при вводе Quasar.
Есть ли способ заставить все, что конвертирует json, строки при чтении с помощью ExecuteScalar, чтобы сделать это с помощью ...Z?
Функция
create function data_survey_r("Key" integer) returns text language plpgsql as $$
BEGIN
RETURN (SELECT ROW_TO_JSON(t)::text FROM data.survey t WHERE t.id = "Key");
END $$;

или
create function data_survey_r("Key" integer) returns json language plpgsql as $$
BEGIN
RETURN (SELECT ROW_TO_JSON(t) FROM data.survey t WHERE t.id = "Key");
END $$;

Он вызывается из C# как
ret = (string) await connection.ExecuteScalarAsync("data_survey_r", new { Key = key }, commandType: CommandType.StoredProcedure);


Подробнее здесь: https://stackoverflow.com/questions/786 ... l-and-json
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»