在C#函数中使用JSONResult

时间:2011-05-11 17:55:16

标签: c# asp.net-mvc json

我有一个以下面的方式返回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);

我需要在另一个需要访问“comments”和“attachments”的类中使用此结果。附件是一个字符串数组,注释是一个字符串。请让我知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

您可以为结果创建一个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()。这会为你分开一点。

答案 1 :(得分:0)

好的,所以这里有一个我认为应该使用dynamic类型符合您需求的答案......

这是你在控制器上调用的方法...我根据你对这个例子的要求输入了“硬编码”的样本数据......我从注释中删除了'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;