Вопрос

Фильтр динамической группы. 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<DataSourceFilterCollection>(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.

 

 

 

 

У меня такой же вопрос

1 комментарий

Отвечу сам себе. Может кому пригодится:

Десерилизация:

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);
                    }
                }

Вопрос закрыт.

Войдите или зарегистрируйтесь, чтобы комментировать