Example #1
0
        /// <exception cref="NotSupportedException" />
        private object ConvertField(ArticleField field, IArticleFilter filter)
        {
            if (field is PlainArticleField plainArticleField)
            {
                return GetPlainArticleFieldValue(plainArticleField);
            }
            if (field is SingleArticleField singleArticleField)
            {
                return ConvertArticle(singleArticleField.GetItem(filter), filter);
            }
            if (field is MultiArticleField multiArticleField)
            {
                var articles = multiArticleField
                    .GetArticlesSorted(filter)
                    .Select(x => ConvertArticle(x, filter))
                    .ToArray();

                return articles.Length == 0 ? null : articles;
            }
            if (field is VirtualArticleField virtualArticleField)
            {
                return virtualArticleField.Fields
                    .Select(x => new { fieldName = x.FieldName, value = ConvertField(x, filter) })
                    .ToDictionary(x => x.fieldName, x => x.value);
            }
            if (field is VirtualMultiArticleField virtualMultiArticleField)
            {
                return virtualMultiArticleField.VirtualArticles.Select(x => ConvertField(x, filter));
            }

            throw new NotSupportedException($"Field type {field.GetType()} is not supported");
        }
Example #2
0
 /// <exception cref="InvalidOperationException" />
 /// <exception cref="NotSupportedException" />
 private void PopulateField(ArticleObject dict, ArticleField field, ArticleContext context)
 {
     if (field is ExtensionArticleField extensionArticleField)
     {
         PopulateExtensionFields(dict, extensionArticleField, context);
     }
     else if (field is MultiArticleField multiArticleField)
     {
         dict[field.FieldName] = multiArticleField
                                 .GetArticles(context.Filter)
                                 .Select(f => ConvertArticle(f, context))
                                 .Where(a => a != null)
                                 .ToArray();
     }
     else if (field is SingleArticleField singleArticleField)
     {
         dict[field.FieldName] = ConvertArticle(singleArticleField.GetItem(context.Filter), context);
     }
     else if (field is PlainArticleField plainArticleField)
     {
         dict[field.FieldName] = ConvertPlainField(plainArticleField);
     }
     else
     {
         throw new NotSupportedException($"Field with type {field.GetType()} is not supported");
     }
 }