asp.net mvc - 在 C# 函数中使用 JSONResult

本文关键字:JSONResult 函数 net mvc asp | 更新日期: 2023-09-27 17:56:23

我有一个函数,它以以下方式返回一个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);

我需要在另一个需要访问"注释"和"附件"的类中使用此结果。这里的附件是一个字符串数组,注释是一个字符串。请让我知道我该怎么做。

asp.net mvc - 在 C# 函数中使用 JSONResult

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

好的,所以这里有一个答案,我相信应该使用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;