public MenuViewModel Build(CachedMenu cachedMenu)
        {
            IEnumerable<CachedMenuItem> cachedMenuItems = new CachedMenuItem[] { };

              if (!string.IsNullOrEmpty(cachedMenu.CachedMenuItems))
            cachedMenuItems = JsonConvert.DeserializeObject<IEnumerable<CachedMenuItem>>(cachedMenu.CachedMenuItems);

              return new MenuViewModel()
              {
            MenuItems = cachedMenuItems.OrderBy(cmi => cmi.Position).Select(
              cmi => new MenuItemViewModelBuilder(this.handler).Build(cmi)
            )
              };
        }
        private CachedMenuItem CacheMenuItem(Culture culture, MenuItem menuItem)
        {
            List<CachedMenuItem> cachedChildMenuItems = new List<CachedMenuItem>();

              foreach (MenuItem childMenuItem in this.handler.Storage.GetRepository<IMenuItemRepository>().FilteredByMenuItemId(menuItem.Id))
            cachedChildMenuItems.Add(this.CacheMenuItem(culture, childMenuItem));

              CachedMenuItem cachedMenuItem = new CachedMenuItem();

              cachedMenuItem.MenuItemId = menuItem.Id;
              cachedMenuItem.Name = this.GetLocalizationValue(culture.Id, menuItem.NameId);
              cachedMenuItem.Url = menuItem.Url;
              cachedMenuItem.Position = menuItem.Position;

              if (cachedChildMenuItems.Count != 0)
            cachedMenuItem.CachedMenuItems = this.SerializeObject(cachedChildMenuItems);

              return cachedMenuItem;
        }