Пример #1
0
        public static ScItemsResponse Parse(string responseString, CancellationToken cancelToken)
        {
            if (string.IsNullOrEmpty(responseString))
            {
                throw new ArgumentException("response cannot null or empty");
            }

            JObject response = JObject.Parse(responseString);

            int  statusCode       = ScItemsParser.ParseOrFail <int>(response, "$.statusCode");
            bool isSuccessfulCode = (200 <= statusCode) && (statusCode <= 299);

            if (!isSuccessfulCode)
            {
                var error = new WebApiJsonStatusMessage(statusCode, ParseOrFail <string>(response, "$.error.message"));
                throw new WebApiJsonErrorException(error);
            }

            int totalCount  = ParseOrFail <int>(response, "$.result.totalCount");
            int resultCount = ParseOrFail <int>(response, "$.result.resultCount");

            var responseItems = response.SelectToken("$.result.items");
            var items         = new List <ISitecoreItem>();

            foreach (JObject item in responseItems)
            {
                cancelToken.ThrowIfCancellationRequested();

                var source = ParseItemSource(item);

                var displayName = (string)item.GetValue("DisplayName");
                var hasChildren = (bool)item.GetValue("HasChildren");
                var id          = (string)item.GetValue("ID");
                var longId      = (string)item.GetValue("LongID");
                var path        = (string)item.GetValue("Path");
                var template    = (string)item.GetValue("Template");

                JObject       fieldsJSON   = (JObject)item.GetValue("Fields");
                List <IField> fields       = ScFieldsParser.ParseFieldsData(fieldsJSON, cancelToken);
                var           fieldsByName = new Dictionary <string, IField>(fields.Count);
                foreach (IField singleField in fields)
                {
                    cancelToken.ThrowIfCancellationRequested();

                    string lowercaseName = singleField.Name.ToLowerInvariant();
                    fieldsByName[lowercaseName] = singleField;
                }


                ScItem newItem = new ScItem(source, displayName, hasChildren, id, longId, path, template, fieldsByName);
                items.Add(newItem);
            }
            return(new ScItemsResponse(totalCount, resultCount, items));
        }
        public static ScItemsResponse Parse(string responseString, string db, int responseCode, CancellationToken cancelToken)
        {
            if (string.IsNullOrEmpty(responseString))
            {
                return(new ScItemsResponse(null, responseCode));
            }

            var response = JToken.Parse(responseString);

            var items = new List <ISitecoreItem>();

            //FIXME: @igk to manny result variants, do we still need universal parser?

            JToken results = null;

            try
            {
                results = response.Value <JToken>("Results");
            }
            catch (Exception)
            {
            }

            if (results != null)
            {
                response = results;
            }

            if (response is JArray)
            {
                foreach (JObject item in response)
                {
                    cancelToken.ThrowIfCancellationRequested();

                    ScItem newItem = ScItemsParser.ParseSource(item, db, cancelToken);
                    items.Add(newItem);
                }
            }
            else if (response is JObject)
            {
                ScItem newItem = ScItemsParser.ParseSource(response as JObject, db, cancelToken);
                items.Add(newItem);
            }

            return(new ScItemsResponse(items, responseCode));
        }
 public static ScItemsResponse Parse(string responseString, string db, CancellationToken cancelToken)
 {
     return(ScItemsParser.Parse(responseString, db, 0, cancelToken));
 }