Фильтр динамической группы. JsonConvert.DeserializeObject, поля SearchData, таблицы ContactFolder
Здравствуйте.
Есть проблема. Получаю данные из поля SearchData и преобразую их в JSON:
byte[] searchData = entity.GetBytesValue("SearchData");
string searchResult = Encoding.UTF8.GetString(searchData);
searchResult при этом приобретает такой вид:
{
"className": "Terrasoft.FilterGroup",
"items": {
"a9fff128-8626-420b-a67f-b94b84b5042b": {
"className": "Terrasoft.CompareFilter",
"filterType": 1,
"comparisonType": 3,
"isEnabled": true,
"trimDateTimeParameterToDate": false,
"leftExpression": {
"className": "Terrasoft.ColumnExpression",
"expressionType": 0,
"columnPath": "HasMobileApp"
},
"isAggregative": false,
"key": "a9fff128-8626-420b-a67f-b94b84b5042b",
"dataValueType": 12,
"leftExpressionCaption": "Мобильное приложение",
"rightExpression": {
"className": "Terrasoft.ParameterExpression",
"expressionType": 2,
"parameter": {
"className": "Terrasoft.Parameter",
"dataValueType": 12,
"value": true
}
}
}
},
"logicalOperation": 0,
"isEnabled": true,
"filterType": 6,
"rootSchemaName": "Contact",
"key": "FolderFilters"
}
Далее пытаюсь десериализовать в объект Terrasoft.UI.WebControls.Controls.DataSourceFilterCollection:
var jsonConverter = new DataSourceFiltersJsonConverter(UserConnection, UserConnection.EntitySchemaManager.GetInstanceByName("Contact")) { PreventRegisteringClientScript = true };
DataSourceFilterCollection filters = JsonConvert.DeserializeObject(searchResult, jsonConverter);
И получаю ошибку:
Newtonsoft.Json.JsonSerializationException: Additional text found in JSON string after finishing deserializing object.
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonConverter[] converters)
Судя по ошибке, остались лишние поля, которых нет в объекте.
Возможно, проблема в jsonConverter.
Коллеги, как этот JSON, превратить в EntitySchemaQueryFilterCollection.
Нравится
Отвечу сам себе. Может кому пригодится:
Десерилизация:
Terrasoft.Nui.ServiceModel.DataContract.Filters filters = Terrasoft.Common.Json.Json.Deserialize<Terrasoft.Nui.ServiceModel.DataContract.Filters>(searchResult);
IEntitySchemaQueryFilterItem esqFilters = filters.BuildEsqFilter("Contact", UserConnection);
var queryFilterCollection = esqFilters as EntitySchemaQueryFilterCollection;
if (queryFilterCollection != null)
{
contactESQ.Filters.LogicalOperation = queryFilterCollection.LogicalOperation;
contactESQ.Filters.IsNot = queryFilterCollection.IsNot;
foreach (IEntitySchemaQueryFilterItem filter in queryFilterCollection)
{
contactESQ.Filters.Add(filter);
}
}
Вопрос закрыт.