Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C函数中使用JSONResult_C#_Asp.net Mvc_Json - Fatal编程技术网

C# 在C函数中使用JSONResult

C# 在C函数中使用JSONResult,c#,asp.net-mvc,json,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

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

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

您可以为结果创建一个ViewModel,然后重用该类。ViewModel只是一个POCO或DTO。这个想法是,它给你一个不同的方式来看待你的数据,没有什么特别的

所以你最终得到了三个部分

获取数据方法:

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。这将为您提供一点帮助。

好的,下面是一个我认为应该适合您使用动态类型的答案

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

@斯兰道:用例真的重要吗?如果他试图构建一个通用的帮助程序库呢?您想在视图中检索这个JSON信息吗?如果是这样,那很容易。@Robert-不太可能,但有点像。如果他误解了非常简单的c操作,并且他可以将字符串和数组作为c对象返回给另一个c函数,从而更容易读取和处理数据,那么我认为他应该知道这一点。第二,如果他将此返回到MVC视图,他应该适当地标记他的问题。嗨。。这是控制器中的现有函数,其结果正在客户端上使用。我需要在我的类(服务器端)中重用这个函数。所以,我有一个c函数,我在这里调用这个函数。。这是控制器中的现有函数,其结果正在客户端上使用。我需要在我的类(服务器端)中重用这个函数。所以,我有一个c函数,在这里我调用这个函数。@Feroz所以如果我理解正确,你可以创建一个方法,返回表示数据的ViewModel对象,就像我建议的那样,只需更改你的linq以选择新的ViewModelName{}。然后,您现有的方法将只调用此方法,并将ViewModel结果传递到this.Json中。这样,代码中需要处理注释的其他部分只需处理ViewModel。这有意义吗?@如果可能的话,考虑一个通用的方法来生成数据。返回JSON只是该方法的包装器;或者,可以从通用方法访问原始形式的数据。匿名类型没有可访问的命名类型,例如,必须提升到要返回或传递的对象,但具有静态访问、动态访问或动态的已定义类型可以简单地传递。非常感谢您的关注。但是我不能改变返回结果的函数。它是一个现有的,正在客户端的许多其他地方使用。我只需要获取JSONResult,它正在返回原来的方式,我现在对函数的调用是从服务器端进行的。@Feroz哦,我明白了,很抱歉,我不能为您的需要提供太多帮助。