Использование JSONResult в функции C # - PullRequest
0 голосов
/ 11 мая 2011

У меня есть функция, которая возвращает JsonResult следующим образом.

var attachments = (from a in ar.Attachments 
  select new { id = a.Id, filename = a.FileName }).ToArray(); 
var result = new
            {
                comments = "Some string",
                attachments = attachments
            };

        return this.Json(result);

Мне нужно использовать этот результат в другом классе, где мне нужен доступ к «комментариям» и «приложениям».Здесь attachments - это строковый массив, а comments - строка.Пожалуйста, дайте мне знать, как я могу это сделать.

Ответы [ 2 ]

1 голос
/ 11 мая 2011

Вы можете создать ViewModel для результата, а затем просто повторно использовать этот класс. Все, что является ViewModel, это просто POCO или DTO. Идея в том, что это дает вам другой способ «взглянуть» на ваши данные, ничего особенного на самом деле.

Таким образом, вы получите 3 части.

Метод получения данных:

public CommentsViewModel GetViewModel()
{
    var attachments = 
        (from a in ar.Attachments 
        select new { id = a.Id, filename = a.FileName }).ToArray(); 
    var result = new CommentsViewModel
            {
                comments = "Some string",
                attachments = attachments
            };

    return result;
}

Ваш метод контроллера:

public JsonResult Get()
{
    return this.Json(GetViewModel());
}

А другой ваш метод будет просто вызывать GetViewModel () напрямую. Это выделит вас немного.

0 голосов
/ 12 мая 2011

Хорошо, вот ответ, который, я считаю, должен соответствовать вашим потребностям, используя тип dynamic ...

Это метод, который вы вызываете на контроллере ... Я вставил 'hardзакодированные 'образцы данных в соответствии с вашими требованиями для этого примера ... Я удалил' s 'из комментариев только потому, что:

public JsonResult GetJsonData()
{
    var result = new
        {
            comment = "Some string",
            attachments = new string[]{"/folder/file-1.jpg", "/folder/file-2.jpg"}
        };

        return this.Json(result);
}

Код, который напрямую вызывает действие контроллера и читает JsonResult:

dynamic result = GetJsonData().Data;

//var comment will result in a string which equals "Some string" in this example
var comment = result.comment;

//var attachments will result in a string[] which is equal to new string[]{"/folder/file-1.jpg", "/folder/file-2.jpg"}
var attachments = result.attachments;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...