【问题标题】:json result is being returned wrapped in double quotesjson 结果被用双引号括起来
【发布时间】:2011-06-04 19:06:09
【问题描述】:

我正在尝试使用以下函数通过对象的 jQuery 返回一个 json 字符串。我似乎无法克服的问题是我的 json 结果在另一端用双引号括起来。

我在this 的帖子中看到了我应该这样做的;

让您的方法返回一个实际对象,并让框架的 JSON 序列化为您完成繁重的工作

但我不完全明白这是什么意思。

这是我正在使用的功能。

Public Function getLine() As String

    Dim data As List(Of ArrayList) = New List(Of ArrayList)

    For Each q In getAllData()
        Dim a As New ArrayList
        Dim d As Date = q.DateTime
        a.Add(d.Ticks)
        a.Add(q.TotalRevenue)
        data.Add(a)
    Next

    Dim s As New Serie
    s.data = data
    Dim str As String = JsonConvert.SerializeObject(s)
    Return str

End Function

非常感谢任何想法。

$.ajax({
    type: "POST",
    dataType: "json",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    url: "_services/ScriptService.asmx/getData",
    success: function (items) {
        var data = eval("(" + items.d + ")");
    },
    cache: false,
    error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); }
});

'items.d' 包含...

"{"data":[[634420512000000000,100000.0000] ... [634421376000000000,100086.0000]]}"

如果我 eval 'items.d' 我得到...

[[634420512000000000, 100000] ... [634421376000000000, 100086]

我在某处读到 eval 是邪恶的,这是真的吗?

【问题讨论】:

  • 这是 WebForms 还是 MVC?您如何将字符串返回浏览器,Response.Write 或其他方法 (JsonResult)?
  • 它的 Web 表单,我希望 MVC,我也希望 C#...lol

标签: asp.net vb.net json


【解决方案1】:

不清楚您发布的代码或处理它的 javascript 是否有问题。所以你得到一个结果,它只是用双引号括起来?如果您在 Visual Studio 中的 javascript 回调函数的开头放置一个断点,您应该能够看到返回的内容。只需在该字符串上调用 eval ,然后从对象中提取您需要的任何内容。从您引用的另一篇文章中:

你显然只是想获得 目的。你有两个选择:-

1) 在你的 javascript 中使用 eval 来转 将字符串转换为对象,例如

函数 onSuccessCallback(retval) { var obj = eval(retval.d); } //将断点放在这里并使用立即或监视窗口查看 retval.d 的值是什么。将其发布到您的问题中,以便我们了解您得到了什么。

【讨论】:

    【解决方案2】:
    Dim serializer as New JavaScriptSerializer()
    Dim arrayJson as String = serializer.Serialize(data)
    return arrayJson;
    

    来自这个post ...

    您正在寻找的类是 JavaScriptSerializer。您可能不得不处理传递给 Serialize() 的对象。

    【讨论】:

      【解决方案3】:

      [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Xml)] 
      Public Function getLine() As String
      

      作为函数的一个指令,这个函数去掉了 scape 字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多