6

我有一个 C#.net 方法,如下所示

 public string jsonTest()
        {
            List<string> list = new List<string>();
            list.Add("aa");
            list.Add("bb");
            list.Add("cc");
            string output = JsonConvert.SerializeObject(list);
            return output;          
        }

在这里,尽管我使用 JsonConvert.SerializeObject 创建了一个 Json 对象,但我得到了一个字符串(因为返回类型是字符串)。

我可以通过使用返回类型 JsonResult (或类似的东西)来像我们在 MVC 中做的那样做下面的事情吗?

  return Json(new { data = list }, JsonRequestBehavior.AllowGet);

是否可以在 asp.net 中创建 Json 数据?

在客户端,我使用 ajax 调用从 jsonTest() 获取数据。

  $.ajax({
                type: 'GET',
                url: "test.aspx",  //In test.aspx pageload calling jsonTest()
                dataType: 'json',
                success: function (data) {
                    alert(data);
                },
                error: function (data) {
                    alert("In error");
                }

            });

当我给出 dataType: 'json' 时,它会进入错误部分(因为 ajax 需要 json 数据但它会得到字符串)。这就是为什么我想将它解析为服务器端的 json 对象。

4

4 回答 4

1

如果是 ASP.NET,

string output = JsonConvert.SerializeObject(list);
Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(output);
Response.End();
于 2013-04-17T12:38:41.367 回答
0

我将假设您正在尝试创建一个WebMethod供 JavaScript XHR 调用或类似调用使用的对象:

ASP.NET 将仅为请求自动序列化为 JSON POST(使用 ASMX 或所谓的“页面方法”)。WCF 和 WebAPI 不需要该POST方法,但需要一些配置。

[WebMethod]
public static List<Task> TasksGet(string projectId) {
    return MyNamespace.Tasks.GetForProject(projectId);
}

您的 JS 调用看到的结果类似于:

{"d": [{
     "__type": "MyNamespace.Task", 
     "id": 1, 
     "description": "This is my first task"
   }, {
     "__type": "MyNamespace.Task", 
     "id": 2, 
     "description": "This is my second task"
   }, {
     ....etc etc
   }
]}

无需直接使用 JsonSerializer 类。

还要确保您的请求标头设置正确:

Content-Accept: application/json;charset=UTF8

于 2013-04-17T13:41:09.677 回答
0

没有什么叫做 JSON 对象。该SerializeObject方法返回一个字符串,因为 JSON 只不过是一个遵循特定规则的字符串值。

要将 JSON 返回到浏览器,您需要做的就是:

Response.ContentType = "application/json; charset=utf-8";
Response.Write(jsonTest());
Response.End();
于 2013-04-17T12:38:35.927 回答
-3

Json 只是字符串数据。这就是该字符串的解释方式。所以它返回一个字符串的事实是正确的。你提到了 ASP.Net。您是否正在使用 ASP.Net 网络表单并正在寻找一种将 JSON 返回到前端的方法?

于 2013-04-17T12:36:58.403 回答