2015-08-24 39 views
1

在Umbraco 7中,是否可以將mediapicker序列化爲json?所以它可能是這樣的東西....Umbraco - MediaPicker對象數據到JSON

[{'name':'muffin', 'file':'muffin.jpg', 'text':'some text', 'etc': 'and so on'}] 

我的設置是這樣的,我有一個mediaPicker命名爲「mediaPhotos」。包含在由mediaPicker選擇的文件夾中我擁有自定義媒體類型「sillyImage」的圖像。

我可以創建一個控制器,只查詢單個項目爲xml。我試圖將mediaPicker所選圖像的整個文件夾作爲目標,並將其內容轉換爲json。

我試圖用張貼bowserm低於其工作原理是這樣的解決方案...

它動態地獲取當前頁與mediaPicker別名。然後它傳遞了自定義媒體類型。

public class MediaApiController : UmbracoApiController 
{ 
    [HttpGet] 
    public MediaApiModel GetMediaById(string id) 
    { 
    var media = Umbraco.TypedMedia(id); 

    return new MediaApiModel 
    { 
     MediaId = media.Id, 
     MediaUrl = media.Url 
    }; 
} 
    [HttpGet] 
    public IEnumerable<MediaApiModel> GetMediaObj(string mediaAlias) 
    { 
     var currentPage = Umbraco.TypedContent(UmbracoContext.Current.PageId); 
     var mediaRootId = currentPage.GetPropertyValue<string>("mediaPhotos"); 
     var mediaRoot = Umbraco.TypedMedia(mediaRootId); 
     var media = mediaRoot.Children.Where(m => m.IsDocumentType(mediaTypeAlias)); 
     return media.Select(m => new MediaApiModel 
     { 
      MediaId = m.Id, 
      MediaUrl = m.Url 
     }); 
    } 
} 



var uri3 = '//' + document.domain + ':14712' + '/umbraco/api/MediaApi/GetMediaFolder?mediaAlias=sillyImage'; 
     $(document).ready(function() { 
      $.getJSON(uri3) 
       .done(function (data) { 
        console.log('return json data object ' + data); 
       }); 
     }); 

我現在收到500錯誤,所以它越來越近了。我認爲這個問題是在控制器中的這些行

var currentPage = Umbraco.TypedContent(UmbracoContext.Current.PageId); 
     var mediaRootId = currentPage.GetPropertyValue<string>("mediaPhotos"); 
     var mediaRoot = Umbraco.TypedMedia(mediaRootId); 

我的網頁使用頁面名稱所以PageId我不知道是根本問題。我知道的一個項目是GetPropertyValue無法從當前頁面獲取媒體選擇器對象。

謝謝!

回答

0

您應該能夠讓您的Api控制器自動將結果序列化爲JSON。只需從UmbracoApiController繼承。

public class MediaApiController : UmbracoApiController 
{ 
    [HttpGet] 
    public MediaApiModel GetMediaById(string id) 
    { 
     var media = Umbraco.TypedMedia(id); 

     return new MediaApiModel 
     { 
      MediaId = media.Id, 
      MediaUrl = media.Url 
     }; 
    } 

    [HttpPost] 
    public IEnumerable<MediaApiModel> GetMediaObj(string mediaTypeAlias) 
    { 
     var currentPage = Umbraco.TypedContent(UmbracoContext.Current.PageId); 
     var mediaRootId = currentPage.GetPropertyValue<string>("mediaPhotos"); 
     var mediaRoot = Umbraco.TypedMedia(mediaRootId); 
     var media = mediaRoot.Children.Where(m => m.IsDocumentType(mediaTypeAlias)); 
     return media.Select(m => new MediaApiModel 
     { 
      MediaId = m.Id, 
      MediaUrl = m.Url 
     }); 
    } 
+0

感謝bowserm,它看起來正確的,但我不能找出語法錯誤 返回的最後一行是給我一個錯誤說它「預計一}或)」,並在收盤時對於返回,它會在類中發出錯誤「無效令牌」,觸發或接口成員聲明「 – tree

+0

糟糕。我剛剛編輯了我的答案。 GetMediaObj模型應該返回一個IEnumerable的MediaApiModels,如果你想獲得它們全部。另外,我還有一些其他的語法錯誤。現在就試試。 – bowserm

+0

我試過了上面的例子,無法讓它返回任何東西。我會嘗試調用「GetMediaObj」方法。我知道我可以用第一種方法「GetMediaById」擊打控制器;這工作正常。我也努力編寫別名中的自定義媒體類型,但仍然沒有任何內容。 – tree