json结果以双引号返回

时间:2011-06-04 19:06:10

标签: asp.net vb.net json

我试图使用以下函数通过对象的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]]}"

如果我评价'items.d'我得到......

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

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

3 个答案:

答案 0 :(得分:2)

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

  

你显然只是想进入   宾语。您有两个选择: -

     

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

     

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

答案 1 :(得分:1)

Dim serializer as New JavaScriptSerializer()
Dim arrayJson as String = serializer.Serialize(data)
return arrayJson;

来自post ...

您正在寻找的课程是JavaScriptSerializer。您可能不得不将对象传递给Serialize()。

答案 2 :(得分:1)

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

作为该功能的指令,它取消了scape chars。