3

在服务器端,我创建了一个列表

List<object> data = new List<object>();

for (var j = 0; j < items.Count(); j++) 
{ 
    var temp = groups.Where(customfilter); 
    data.Add(Html.Raw(Json.Encode(temp)));
}

System.Web.Script.Serialization.JavaScriptSerializer serializer = new 
    System.Web.Script.Serialization.JavaScriptSerializer(); 

var serializedData = serializer.Serialize(data);

在 Javascript 中,以下内容仅适用于原始类型。

var localData = @data;

这是错误:

System.Collections.Generic.List`1[System.Object]

我错过了什么?

4

2 回答 2

1

我假设您发布的 C# 代码是控制器操作方法。

您需要让控制器方法返回 JsonResult,然后使用 JSON 库对其进行反序列化。

就像是

public class MyController: Controller
{
    public JsonResult MyAction ()
    {
        var data = new List<object>();
        for (var j = 0; j < items.Count(); j++) 
        { 
            var temp = groups.Where(customfilter); 
            data.Add(temp);
        }
        return Json (data, JsonRequestBehavior.AllowGet);
    }
}

请注意,当您将每个项目添加到列表时,您不需要对其进行序列化。

从客户端,您可以调用您的方法并将结果反序列化为列表。你可以这样做:

$.ajax ({ url:'/My/MyAction'}).done (function (data) {
    var myList = JSON.parse (data);
});

编辑:

经过一些测试,我发现您可以通过以下方式访问数据:

var myList = data;

不知道为什么,但是“数据”直接作为数组发送。

希望能帮助到你!

于 2013-08-21T10:54:03.640 回答
0

首先检查这个链接http://james.newtonking.com/pages/json-net.aspx

第二

var temp = groups.Where(customfilter).ToList(); 

如果您使用 where 将其投射到列表中,或者它将类似于查询对象 *(我不记得确切的类型)或者如果您想选择一个对象,请尝试 groups.FirstOrDefault

第三

 data.Add(temp);

序列化器会做他的工作来转换它。

于 2013-08-21T06:26:05.847 回答