Have you tried using the JSON Serializer in System.Web.Extensions. I have very good luck building custom serializers with this library that are JSON friendly.
On a side note, I just got my first Comet App running with Asp.net and prototype. Thanks Prototype! Michael Stephens Electrical Engineering Graduate Student University of Wyoming [EMAIL PROTECTED] or [EMAIL PROTECTED] On Sun, Nov 2, 2008 at 9:19 AM, T.J. Crowder <[EMAIL PROTECTED]> wrote: > > Hi, > >> {\u0027Count\u0027:1}....umm curious about one thing though, you said \" at >> those positions are invalid, but isn't that a javascript unicode >> representation as well? > > No, \" is an _escape sequence_ (it represents a double quote), but not > a _Unicode escape sequence_. (See the spec for details.) Escapes are > only valid *within* strings. The whole problem you're having is that > what you're getting back is one big encoded string (quotes around it, > quotes within it escaped, etc.). Removing the quotes doesn't un- > encode it, it just removes the quotes; and then suddenly all of those > escapes are invalid sequences. > > Good luck with it, > > -- T.J. :-) > > On Nov 2, 12:25 pm, "Nikhil Soneja" <[EMAIL PROTECTED]> wrote: >> I think you're probably right about passing an object to the serializer, had >> mulled over whether I should create a serializable class to return the data, >> instead of a formatted string (might also try returning a list), just >> thought it might still apply the invalid \" around each string property of >> the class though, but I guess the best way is to try! Will also try posting >> to one of the ASP.NET forums, think I'm getting out of scope here. >> >> Reason I said \u0027 was unparseable was because when retrieving that with >> prototype, the responseJSON shows up as undefined...so I figured it must >> have been because of that, but perhaps something else was causing the >> issue....the JSON I had at that point (as per firebug) was >> {\u0027Count\u0027:1}....umm curious about one thing though, you said \" at >> those positions are invalid, but isn't that a javascript unicode >> representation as well? >> >> Thanks so much for all the help! >> Nikhil >> >> On Sun, Nov 2, 2008 at 4:10 PM, T.J. Crowder <[EMAIL PROTECTED]> wrote: >> >> > Hi, >> >> > > ...the problem is the javascript isn't able >> > > to parse the JSON, though it is palpably valid (once I removed the >> > enclosing >> > > quotes using jscript... >> >> > No, at that point you have invalid JSON data. You said it comes back >> > as: >> >> > "{\"count\": 0}" >> >> > If you strip off the quotes, that's: >> >> > {\"count\": 0} >> >> > ...which is not valid, the backslashes cannot appear at that position >> > in the data. This is valid JSON: >> >> > {"count": 0} >> >> > To me, it sounds like you're giving the ASP.Net serializer a string, >> > which it's correctly encoding for transfer (hence the quotes and >> > such), where the serializer is expect you to give it an *object* it >> > can serialize for transfer -- e.g., something with a "count" property >> > with the value 0, rather than a string. >> >> > > ...single quotes don't seem to work at all as >> > > they come through as \u0027, which is unparseable >> >> > Er, no, that's perfectly parseable. It's a JavaScript Unicode escape >> > sequence for a single quote. "\u0027" is exactly the same as "'" (or, >> > for that matter, "\x27"). >> >> > I think you're best off pursuing this in an ASP.Net forum; the problem >> > is in the data being sent back rather than the Prototype JSON parser. >> >> > Good luck with it! >> > -- >> > T.J. Crowder >> > tj / crowder software / com >> >> > On Nov 2, 11:31 am, "Nikhil Soneja" <[EMAIL PROTECTED]> wrote: >> > > Thanks for the quick reply TJ, much appreciated....I agree, would not >> > want >> > > to fix on the client side even as a quick fix, because that will leave me >> > > open to browser dependent issues etc...besides would like to keep the >> > > jscript to a minimum, which is why I'm very grateful to have something >> > like >> > > prototype! My gut also tells me the issues are all related to how I've >> > > written the webservice. >> >> > > I did a lot of research on google though before posting my q, came across >> > > the same articles you mentioned (plus a lot more which sent me off on a >> > > tangent! eg; returning data dictionary types, which failed because those >> > > classes aren't serializable)...I have JSON configured as the return type >> > on >> > > the webservice, and the data is coming through in that format (ie; not in >> > > XML tags, as it would otherwise)...the problem is the javascript isn't >> > able >> > > to parse the JSON, though it is palpably valid (once I removed the >> > enclosing >> > > quotes using jscript, which again I feel is because I'm returning a >> > string >> > > type from the webservice)...whats strange also is that the JSON website >> > > lists \" as the official escape sequence for double quotes, so its >> > strange >> > > that eval doesn't work with that...I do apologize also I'm probably not >> > > wording this that well, but have a huge deadline looming so forgive my >> > > incoherence! :) >> >> > > For reference my webservice has the following header >> > > <WebMethod(EnableSession:=True)> _ >> > > <ScriptMethod(ResponseFormat:=ResponseFormat.JSON)> _ >> > > Public Function GetPageData(ByVal pageNumber As Integer, ByVal >> > keywords >> > > As String) As String >> >> > > and internally I loop through the rows of a datatable in a dataset and >> > write >> > > it as a JSON string to return. I reduced this JSON string to a minimum >> > for >> > > testing purposes, which is just the count of records as {""Count"":0} ("" >> > is >> > > the escape sequence for VB.NET)...single quotes don't seem to work at >> > all as >> > > they come through as \u0027, which is unparseable >> >> > > my prototype call in my test html file was : >> > > new Ajax.Request('http://localhost/ProjectSearch.asmx/GetPageData', >> > > { >> > > method:'post', >> > > contentType:'application/json;charset=utf-8', >> > > postBody:'{"pageNumber":"4","keywords":"burj al arabi"}', >> > > onSuccess: function(transport){ >> > > var outputDivObj = document.getElementById('outputDiv'); >> > > outputDivObj.innerHTML = transport.responseJSON.Count >> >> > > // tried this code to parse the json indirectly, later injected the >> > replace >> > > regex in the prototype evalJSON function as // well >> > > //var trimmed = transport.responseText.replace(/^\"+|\"+$/g, '') ; >> > > //var jsonObj = eval(trimmed); >> > > //outputDivObj.innerHTML = jsonObj.Count; >> > > } >> >> > > }); >> >> > > Some weird anomalies, have been debugging the prototype js with Firebug >> > as >> > > well: >> > > responseText = "{\"count\":0}" gets parsed as responseJSON = {"count":0} >> > (as >> > > a string though) >> > > responseText = {\"count\":0} (with the enclosing quotes removed) does >> > not >> > > get parsed at all >> > > responseText = {count:0} works fine and gets parsed straight away as a >> > > jscript object >> >> > > For the time being though, I have jettisoned JSON and resorted to >> > XML...of >> > > course that comes with its own issues, as I'm wading through XML Dom >> > parsing >> > > now :) >> >> > > On Sun, Nov 2, 2008 at 2:56 PM, T.J. Crowder <[EMAIL PROTECTED]> >> > wrote: >> >> > > > Hi Nikhil, >> >> > > > Although you could try to fix this on the client side by removing the >> > > > enclosing quotes and changing the escaped double quotes within to just >> > > > double quotes, I think you're better off dealing with the server-side >> > > > so it's returning properly-formatting JSON data. That'll pay off in >> > > > the long run, and I'm sure ASP.Net's web services stuff can be made to >> > > > return valid JSON. If not, consider ditching using the web services >> > > > stuff and just use ASP.Net directly. >> >> > > > But if you're going to deal with it on the client-side, you can >> > > > probably do it with a regex (or a series of them) using JavaScript's >> > > > String.replace or Prototype's String.gsub. Basically, look at the >> > > > string escaping rules in the spec[1] and apply them in reverse. I >> > > > would suggest *not* being tempted by the easy option of just replacing >> > > > \" with "; you'll need to handle all of the single-character escapes >> > > > (' " \ b f n r t v, I think, but check) as well as hex escapes and >> > > > unicode escapes. >> >> > > > But again, almost certainly best to handle this by fixing what the >> > > > server's returning. I searched for "+asp.net +"web service" +json" >> > > > and found quite a few articles, including this one[2] that says "The >> > > > default serialization of AJAX-based Web services is JSON." and "...one >> > > > of the major additions of the ASP.NET 2.0 AJAX Extensions is a JSON >> > > > serializer." >> >> > > > [1] >> >http://www.ecma-international.org/publications/standards/Ecma-262.htm >> > > > [2]http://msdn.microsoft.com/en-us/magazine/cc163499.aspx >> >> > > > FWIW, >> > > > -- >> > > > T.J. Crowder >> > > > tj / crowder software / com >> >> > > > On Nov 2, 9:19 am, Nikhil <[EMAIL PROTECTED]> wrote: >> > > > > Hi, Have just started using prototype with ASP.NET 2.0 AJAX >> > > > > Webservices and JSON two days ago, and have run into a very strange >> > > > > roadblock, ok let me explain the basic details of my app first : My >> > > > > ASP.NET webservice has one function that returns a dataset in JSON >> > > > > format (I've manually transformed the dataset into JSON looping >> > > > > through the rows)...the webservice returns the value as a string >> > > > > (which was the only way I could get it to work)...now when I consume >> > > > > the webservice using AJAX.request, the transport.responseJSON remains >> > > > > a string not an object! What seems to happen is that there's an >> > extra >> > > > > set of double quotes wrapped around the string returned by the >> > > > > webservice...I have the feeling this is because of the webservice >> > > > > returning a string value. Ok, now as a test, I modified the >> > > > > javascript evalJSON function to trim the quotes around the string >> > > > > before parsing it using eval...this still doesn't work if any of the >> > > > > parameters inside the JSON formatted string are enclosed in double >> > > > > quotes either, the reason being these get interpreted as \" which is >> > > > > invalid, essentially VB.NET: {""Count"":10} get translated to in >> > > > > transport.responseText as {\"Count\":10}...however as per JSON specs, >> > > > > parameter names and string values must be enclosed in double quotes, >> > > > > so can't do away with it! If anyone could help out with this >> > two-fold >> > > > > problem ie; double quotes around the returned webservice string >> > > > > result; and the \" issue, I would be eternally grateful! If anyone >> > > > > has any code samples that would be super as well thanks! Regards, >> > > > > Nikhil >> >> > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---