我试图使用以下函数通过对象的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是邪恶的,这是真的吗?
答案 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。