我有一个以下面的方式返回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”的类中使用此结果。附件是一个字符串数组,注释是一个字符串。请让我知道如何做到这一点。
答案 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;