2010-12-15 155 views
0

我有下面的代码,请与我们面临的问题我知道其中m布莱恩错误..在序列化vb.net字符串JSON字符串

VB

For Each dr As DataRow In dvItems.Table.Rows 
    strItems &= "'" & dr("ItemTitle") & "'," 
Next 
strItems = strItems.Trim(",") // before serialize strItems contains 'mouse','keyboard','led' 
strItems = JsonConvert.SerializeObject(strItems) // after serialize strItems contains "'mouse','keyboad','led'" 

的JavaScript:在这里,我”米使用Autocomplete.js使用JQuery

function InitAutocomplete() 
{ 
    var Jsondata = [<%=strItems %>].sort(); 
    data = jQuery.parseJSON(Jsondata); 
    AutoComplete_Create('<%=txtItem.ClientId %>', data); 
} 

而在Firefox中使用Firebug data正显示出空调试...就是我在这里干什么?

编辑: Autocomplete.js需要这种格式的“鼠标”,“键盘”,“LED” data之前,我是干什么这不JSON,这是工作的罚款。

回答

1

jQuery.parseJSON用于解析JSON字符串。你把它交给一个数组。你的JavaScript代码,一旦它到达客户端,将是这个样子:

function InitAutocomplete() 
{ 
    var Jsondata = ["'mouse','keyboad','led'"].sort(); 
    data = jQuery.parseJSON(Jsondata); 
    AutoComplete_Create('someid', data); 
} 

...这meanson Jsondata将与一个条目,字符串'mouse','keyboard','led'数组。

如果我明白你在做什么,你根本不需要JSON。

VB:

strItems = "" 
For Each dr As DataRow In dvItems.Table.Rows 
    ' Use JsonConvert.SerializeObject to quote and escape the 
    ' string; even though we're not actually using JSON, it 
    ' gives us a valid, properly-escaped JavaScript string 
    ' literal. 
    strItems &= JsonConvert.SerializeObject(dr("ItemTitle")) & "," 
Next 
strItems = strItems.Trim(",") 

的JavaScript(带内嵌VB):

function InitAutocomplete() 
{ 
    var data = [<%=strItems %>].sort(); 
    AutoComplete_Create('<%=txtItem.ClientId %>', data); 
} 

甚至只是:

function InitAutocomplete() 
{ 
    AutoComplete_Create('<%=txtItem.ClientId %>', 
         [<%=strItems %>].sort()); 
} 
+0

'JsonConvert.SerializeObject(strItems)'未进行转换到' JSON'字符串? – FosterZ 2010-12-15 11:07:17

+0

@Crowder:我同意,但如果项目包含这个'']'那么我的脚本就结束了,这就是为什么我试图使用JSON – FosterZ 2010-12-15 11:10:56

+0

@FosterZ:对,你需要确保你输出的任何字符串都能正确转义(因为你使用'''作为字符串分隔符输出字符串,所以你必须确保字符串中的任何'''在其前面有一个反斜杠;你还必须确保任何反斜杠在它前面有一个反斜杠)。我找不到'JsonConvert.SerializeObject'的引用页面(令人惊讶),但是从你的问题中的引用中,可能会有帮助 - 请参阅上面代码中的注释。 – 2010-12-15 11:13:57