【问题标题】:Serializing an EnumerableRowCollection into a JSONResult将 EnumerableRowCollection 序列化为 JSONResult
【发布时间】:2012-11-27 16:30:35
【问题描述】:

我有以下应该返回 JSONResult 的方法,因此我可以在带有 javascript 的 AJAX 方法中使用它并为文本框加载自动完成建议。每次特定下拉列表更改时,我都会加载它。

[AcceptVerbs(HttpVerbs.Post), Authorize]
    private JsonResult GetSchemaNodeValues(string SchemaNodeId)
    {
        var query = @"Select ld.""Value"" 
        From ""LookupData"" ld, ""SchemaNode"" sn
        Where sn.""LookupTypeId"" = ld.""LookupTypeId""
        And sn.""SchemaNodeId"" = '{0}'";

        DataSet data = new DataSet();


            data = ServiceManager.GenericService.ExecuteQuery(String.Format(query, SchemaNodeId)).Data;

        var res = data.Tables[0].AsEnumerable().Select(dr => new
        {
            Value = dr["Value"].ToString()
        });

        return JsonConvert.SerializeObject(res);

    }

return JsonConvert.SerializeObject(res); 下出现以下错误

Error   106 Cannot implicitly convert type 'string' to 'System.Web.Mvc.JsonResult'  

有什么办法可以解决这个问题吗?

在此之前,我尝试使用 System.Web.mvc.Controller.Json(res);它从一个对象返回一个 JSONResult。

但我无法使用它,因为我的类是 PageDialog 而不是 Controller,因此它无法访问 Controller 的受保护内部方法,例如 JSon()。我得到的错误是 JSon() 由于其保护级别而无法访问。 Controller 类已锁定,我无法将其公开或创建解决方法,因此我使用 JsonConvert.SerializeObject(res); 更改了方法;

非常欢迎任何建议。

【问题讨论】:

    标签: c# .net json serialization


    【解决方案1】:
    private dynamic GetSchemaNodeValues(string SchemaNodeId)
    {
        ...
        return data.Tables[0].AsEnumerable().Select(dr => new
        {
            Value = dr["Value"].ToString()
        });
    }
    

    private string GetSchemaNodeValues(string SchemaNodeId)
    {
        ...
        var result = data.Tables[0].AsEnumerable().Select(dr => new
        {
            Value = dr["Value"].ToString()
        });
        return JsonConvert.SerializeObject(result);
    }
    

    【讨论】:

    • 如果您查看我的描述,我已经尝试过使用 Json(res)。完整路径是 System.Web.mvc.Controller.Json(res);它不会让我使用它。请阅读我的描述以了解原因,因此我不再重复!感谢您的快速回复!
    • 不是根据您发布的代码。该方法返回一个 JsonResult 但您返回的字符串是方法体。这就是错误的来源。在我的代码示例中。该方法返回一个 ActionResult 并且方法体将匿名类型传递给 Json 方法。
    • 你在第一部分是对的。问题确实是当方法需要 JSONResult 时我返回一个字符串。但问题不在于字符串。这是如何将该字符串转换为 JSONResult 的方法。就像我说我不能使用 return Json(res);我收到一条错误消息,提示 Json() 在当前上下文中不存在。然后即使我将其更改为 System.Web.Mvc.Controller.Json(res);它识别它,但给了我我所说的另一个错误:JSon() 由于其保护级别而无法访问。所以换句话说我不能使用 JSon(res)
    • 你的控制器动作继承自 Controller 基类对吗?你是从url调用控制器还是从另一个动作重定向,对吗?您所描述的听起来像是未正确调用该操作或用法不正确。
    • 好的,在这种情况下,更改方法签名以返回字符串或匿名对象,而不是 JsonResult。 JsonResult(和控制器)特定于 ASP.NET MVC。它们在 HTTP 之外没有意义。我会更新我的答案以反映这一点。
    猜你喜欢
    • 2020-08-19
    • 2014-10-08
    • 2019-08-20
    • 2022-07-19
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多