У нас есть строка Dapper в результате запроса Dapper, которую я хочу сохранить как строку json в нашем база данных. К сожалению, мне не удалось заставить это работать.
Итак, давайте начнем с некоторой вводной информации.
Справочная информация
Мы реализуем проект, в котором извлекаем имена таблиц из таблицы, чтобы знать, к каким таблицам нам нужно обращаться. Мы также хотим, чтобы это было как можно более гибким, поэтому мы решили не использовать конкретный POCO для наших данных.
Мы используем SQL Server 2014, поэтому, к сожалению, мы пока нет опции «ДЛЯ JSON».
Код
Наш код выглядит примерно так, где GetData — это наш фактический запрос:
Код: Выделить всё
var data = _queryHandler.Handle(new GetData(tableName.ToString(), 0), database);
Код: Выделить всё
conn.QueryAsync(query, parameters)
Код: Выделить всё
EXEC ('SELECT * FROM ' + @table + ')'
Поскольку имя таблицы каждый раз меняется, мы не хочу принудительно использовать POCO на выходе. Иногда это пользователь, иногда роль, так сказать, поэтому невозможно предсказать, какой вывод он вернет.
Результаты
Это отлично работает. Мы можем извлечь данные из нашей переменной, и это будет выглядеть так, как будто это IEnumerable, и все должно быть в порядке. Я так понимаю, мы можем просто прочитать их в цикле и извлечь строки. Пока проблем нет.
Решаемая проблема
Дальше Я хочу преобразовать данные из указанного DapperRow в строку json, но я не могу заставить данные вести себя как строка json, поскольку JsonConvert.SerializeObject с треском терпит неудачу. DapperRow выглядит следующим образом (опять же, упрощенно).
Код: Выделить всё
{{DapperRow, Id = '07501399-b385-4d8e-bacc-gad9d04c35f7', UserName = 'test8', ApplicationId = '4721fafb-12e6-4e3c-9298-etd82d18a0cb', IsApproved = 'True', IsLockedOut = 'False', CreateDate = '26-3-2019 07:52:55' }}
Код: Выделить всё
public class JsonObjectTypeHandler : SqlMapper.ITypeHandler
{
public void SetValue(IDbDataParameter parameter, object value)
{
parameter.Value = (value == null)
? (object)DBNull.Value
: JsonConvert.SerializeObject(value);
parameter.DbType = DbType.String;
}
public object Parse(Type destinationType, object value)
{
return JsonConvert.DeserializeObject(value.ToString(), destinationType);
}
}
Может ли кто-нибудь указать мне правильное направление? У меня такое ощущение, что я упускаю из виду что-то простое.
Подробнее здесь: https://stackoverflow.com/questions/556 ... ow-to-json
Мобильная версия