【问题标题】:Access C# List inside Javascript在 Javascript 中访问 C# 列表
【发布时间】:2013-08-21 00:58:45
【问题描述】:

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

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]

我错过了什么?

【问题讨论】:

  • 将其序列化为 JSON 并放入模板中。 “我错过了什么?” --- 事实上,C# 不知道什么是 javascript。
  • 我试过了。它给了我这样的东西:[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}];
  • 现在您缺少的是 - C# 不知道 HOW 来序列化 Object
  • System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var serializedData = serializer.Serialize(data); 这个不行吗?
  • JavaScriptSerializer 怎么知道Object 有哪些属性?为什么不使用一些更具体的类型?

标签: c# javascript asp.net-mvc


【解决方案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;

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

希望对你有帮助!

【讨论】:

    【解决方案2】:

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

    第二个

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

    如果您使用 where 将其转换为列表,否则它将类似于 Query 对象 *(我不记得确切的类型) 或者,如果您想选择一个对象,请尝试 groups.FirstOrDefault

    第三

     data.Add(temp);
    

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

    【讨论】:

    • 我刚试过。序列化后我得到相同的结果[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},‌​{},{}];。在调用 serialize() 方法之前,一切都很好。
    • 好的,告诉我您选择了一项,对吗?然后给我新的代码部分,您可以在其中选择数据并添加到列表中。
    • 我不确定我是否理解你。我尝试了 ToList() 并且没有任何变化。问题是我无法序列化 JSON。如果我根本不进行 Json 转换,则会发生序列化,但它又存在缺陷并引发语法错误。
    • 我不确定原生序列化器是如何工作的,你试过 json.net 吗?
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多