private static bool WrapItems(ContentArea contentArea, ContentSerializerSettings contentSerializerSettings) { var wrapItemsAttribute = contentArea.GetType().GetCustomAttribute <ContentSerializerWrapItemsAttribute>(false); var wrapItems = wrapItemsAttribute?.WrapItems ?? contentSerializerSettings.GlobalWrapContentAreaItems; return(wrapItems); }
public void ShouldUsePassedInContentSerializerSettings() { var pageReference = new PageReference(3000); var page = new StandardPageBuilder().WithPageReference(pageReference).Build(); var serviceLocator = Substitute.For <IServiceLocator>(); var urlHelper = Substitute.For <IUrlHelper>(); var pageReferenceUrl = "https://josefottosson.se/some-path"; var contentReferencePropertyHandler = new ContentReferencePropertyHandler(urlHelper, this._contentSerializerSettings); urlHelper.ContentUrl(pageReference, Arg.Any <IUrlSettings>()).Returns(pageReferenceUrl); serviceLocator.TryGetExistingInstance(typeof(IPropertyHandler <PageReference>), out var _).Returns(x => { x[1] = new PageReferencePropertyHandler(contentReferencePropertyHandler, _contentSerializerSettings); return(true); }); ServiceLocator.SetLocator(serviceLocator); var customContentSerializerSettings = new ContentSerializerSettings { UrlSettings = new UrlSettings { UseAbsoluteUrls = false } }; var result = this._sut.GetStructuredData(page, customContentSerializerSettings); result.ShouldContainKey("PageReference"); result["PageReference"].ShouldBe("/some-path"); }
private string Execute(IContentData contentData, ContentSerializerSettings settings) { var result = this._propertyManager.GetStructuredData(contentData, settings); return(JsonConvert.SerializeObject(result, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() })); }
public IEnumerable <object> GetValue(ContentArea contentArea, ContentSerializerSettings settings) { if (contentArea?.Items == null || !contentArea.Items.Any()) { return(Enumerable.Empty <IContentData>()); } var content = new List <IContentData>(); foreach (var contentAreaItem in contentArea.Items) { var loadedContent = this._contentLoader.Get <ContentData>(contentAreaItem.ContentLink); if (loadedContent != null) { content.Add(loadedContent); } } return(content); }
public object GetStructuredData(IContentData contentData, ContentSerializerSettings settings) { return(this._propertyManager.GetStructuredData(contentData, settings)); }
public string Serialize(IContentData contentData, ContentSerializerSettings settings) { return(Execute(contentData, settings)); }
public Dictionary <string, object> GetStructuredData( IContentData contentData, ContentSerializerSettings settings) { var properties = this._propertyResolver.GetProperties(contentData); var structuredData = new Dictionary <string, object>(); foreach (var property in properties) { var key = this._propertyNameStrategy.GetPropertyName(property); if (property.PropertyType.IsValueType) { structuredData.Add(key, this._valueTypePropertyHandler.GetValue(contentData, property)); continue; } var value = property.GetValue(contentData); switch (value) { case string _: var stringValue = this._stringPropertyHandler.GetValue(contentData, property); AddItem(key, stringValue, structuredData, settings.ThrowOnDuplicate); break; case ContentArea c: var contentAreaItems = this._contentAreaPropertyHandler.GetValue(c, settings); if (WrapItems(c, settings)) { var items = new Dictionary <string, List <object> >(); foreach (var item in contentAreaItems) { var result = GetStructuredData((IContentData)item, settings); var typeName = item.GetOriginalType().Name; if (items.ContainsKey(typeName)) { items[typeName].Add(result); } else { items[typeName] = new List <object> { result }; } } AddItem(key, items, structuredData, settings.ThrowOnDuplicate); } else { var items = new List <object>(); foreach (var item in contentAreaItems) { var result = GetStructuredData((IContentData)item, settings); items.Add(result); } AddItem(key, items, structuredData, settings.ThrowOnDuplicate); } break; case Url url: var urlValue = this._urlPropertyHandler.GetValue(url, settings.UrlSettings); AddItem(key, urlValue, structuredData, settings.ThrowOnDuplicate); break; case string[] _: var strings = this._stringArrayPropertyHandler.GetValue(contentData, property); AddItem(key, strings, structuredData, settings.ThrowOnDuplicate); break; case BlockData b: var blockDataResult = GetStructuredData(b, settings); AddItem(key, blockDataResult, structuredData, settings.ThrowOnDuplicate); break; case ContentReference c: var contentReferenceResult = this._contentReferencePropertyHandler.GetValue(c, settings.ContentReferenceSettings); AddItem(key, contentReferenceResult, structuredData, settings.ThrowOnDuplicate); break; case PageType pt: var pageTypeResult = this._pageTypePropertyHandler.GetValue(pt); AddItem(key, pageTypeResult, structuredData, settings.ThrowOnDuplicate); break; case IList <ContentReference> contentReferenceList: var contentReferenceListResult = this._contentReferenceListPropertyHandler.GetValue(contentReferenceList, settings.ContentReferenceSettings); AddItem(key, contentReferenceListResult, structuredData, settings.ThrowOnDuplicate); break; case XhtmlString x: var xhtmlStringResult = this._xhtmlStringPropertyHandler.GetValue(x); AddItem(key, xhtmlStringResult, structuredData, settings.ThrowOnDuplicate); break; case LinkItemCollection linkItemCollection: var linkItemCollectionResult = this._linkItemCollectionPropertyHandler.GetValue(linkItemCollection, settings.UrlSettings); AddItem(key, linkItemCollectionResult, structuredData, settings.ThrowOnDuplicate); break; default: if (settings.UseCustomPropertiesHandler && value != null) { var customPropertyResult = this._customPropertiesHandler.GetValue(value); if (customPropertyResult != null) { AddItem(key, customPropertyResult, structuredData, settings.ThrowOnDuplicate); } } break; } } return(structuredData); }