Здравствуйте.

Есть проблема. Получаю данные из поля 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.

 

 

 

 

Нравится

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

                    }

                }

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

Показать все комментарии