将EnumerableRowCollection序列化为JSONResult

时间:2012-11-27 16:30:36

标签: c# .net json serialization

我有以下方法应该返回一个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)改变了方法;

非常欢迎任何建议。

1 个答案:

答案 0 :(得分: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);
}