Umbraco - MediaPicker对象数据到JSON

时间:2015-08-24 14:29:30

标签: json xml umbraco

在Umbraco 7中,是否可以将一个mediapicker序列化为json?所以它可能是这样的......

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

我的设置是这样的,我有一个名为" mediaPhotos"的mediaPicker。包含在mediaPicker选择的文件夹中,我有自定义媒体类型" sillyImage"的图像。

我可以创建一个控制器,只查询单个项目为xml。我试图瞄准mediapicker选择的整个图像文件夹并将其内容转换为json。

我试图使用下面的bowserm发布的解决方案,就像这样...

它使用mediaPicker别名动态获取CurrentPage。然后它传递了自定义媒体类型。

 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无法从当前页面获取媒体选择器对象。

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该能够让Api Controller自动将结果序列化为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
        });
    }