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
-~----------~----~----~----~------~----~------~--~---

Reply via email to