【问题标题】:Json object in C# .netC# .net 中的 Json 对象
【发布时间】:2013-04-17 12:33:51
【问题描述】:

我有一个 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 对象。

【问题讨论】:

  • 您希望它用于服务器端消费还是客户端?你想用结果来完成/做什么?
  • 如果您正在谈论创建一个 asp 网络方法,您返回字符串类型并使用 Json 序列化程序来转换对象
  • 这应该是 WebMethod 吗?如果是这样,只需将您的返回类型设为List&lt;string&gt;,它就会自动序列化为 JSON(不是转义的“JSON-string”)

标签: c# asp.net json object json.net


【解决方案1】:

如果是 ASP.NET,

string output = JsonConvert.SerializeObject(list);
Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(output);
Response.End();

【讨论】:

  • 如果我不在 ajax 中使用 dataType: 'json',它的工作正常。否则它会显示 alert("In error");
【解决方案2】:

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

要将 JSON 返回到浏览器,您只需:

Response.ContentType = "application/json; charset=utf-8";
Response.Write(jsonTest());
Response.End();

【讨论】:

    【解决方案3】:

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

    ASP.NET 将仅针对 POST 请求自动序列化为 JSON(使用 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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我想你应该发表评论
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多