Сериализация расширенного фильтра на C#
Доброго времени суток.
Имеется некий расширенный фильтр на странице записи. Сохраняется в виде JSONa в колонку таблицы.
![]()
Чтобы использовать этот фильтр в запросах имеется специальный класс, который десериализует строку в коллекцию фильтров для EntitySchemaQuery.
var constructorArgument = new ConstructorArgument("userConnection", userConnection);
var filterConverter = ClassFactory.Get(constructorArgument);
IEntitySchemaQueryFilterItem filterCollection = filterConverter.ConvertToEntitySchemaQueryFilterItem(esq, filterValue);
esq.Filters.Add(filterCollection);где filterValue - это тот самый расширенный фильтр.
При этом я не наблюдаю обратного механизма сериализации коллекции фильтров в формат, понятный для модуля расширенных фильтров на клиентской части. Как правильно сохранить коллекцию фильтров в базе?
Пока единственный рабочий вариант что приходит в голову - составлять его из частей заранее заготовленных строк.
Нравится
Добрый день, Михаил!
Действительно, в классе ProcessDataContractFilterConverter нет подходящего метода для сериализации. Там есть метод GetActivityFinalStatusFilter, который возвращает уже сигнализированную строку фильтров для активности, однако, он не то, что нужно в этой ситуации.
Рекомендую ознакомится с примеров https://academy.terrasoft.ua/docs/developer/integrations_and_api/data_s…, а именно "Пример реализации класса коллекции фильтров".
Помимо этого прикладываю другой пример сериализации фильтров в c# коде.
string serializedFilters = Json.Serialize(new Filters {
FilterType = FilterType.CompareFilter,
ComparisonType = FilterComparisonType.Equal,
LeftExpression = new ColumnExpression {
ColumnPath = "testColumn"
},
RightExpression = new BaseExpression {
ExpressionType = EntitySchemaQueryExpressionType.Parameter,
Parameter = new Parameter {
Value = expectedFilterValue,
DataValueType = DataValueType.Guid
}
}
});