I have something wrong with either json or ASP.NET MVC, I am using ASP.NET MVC and here is what I am sending from the client.

NOTE
After debugging in Chrome, I am explaining that this is what is passed within javascript, I am not manually setting State to null as it is coming as result from somewhere else as null. Which once again is not in my control as it is coming from database.

While debugging, State displays that it is null, instead of "null", but while debugging in MVC it is displaying "null" instead of null.

So is it jQuery that sends null as "null" or is it MVC that is setting null as "null"?

SOLUTION

I had to just recursively create new object hierarchy (cloning the object) and send it to jQuery, as jQuery sent data as Form Encoded, in which there is no way to represent null, however ideally jQuery should not have serialized null at all.

Please READ, It is coming from database as result from somewhere else, I have just written a smaller code to explain the situation, I cant set it as null, also when result is retrieved back from MVC, JSON parses State back to null correctly instead of "null".
–
Akash KavaDec 9 '11 at 16:11

@AkashKava, learn how http works. ALL the messages between server and client are PURE strings ONLY. I already linked this for you. You need explicit parsing to convert the string "null" to ASP.NET null value, since it doesn't apparently automatically do it for you. JSON parses PURE string into javascript object presentation, so of course "null" sent from server is real null value in javascript. So much rage...
–
EsailijaDec 9 '11 at 16:15

@Esailija, learning HTTP has nothing to do with this, we have exact same application that works on iOS, Flex, Silverlight as well, everywhere null is transformed correctly, it has nothing to do with my learning of http, it is simple that json has correct provision for null and it should be parsed or transformed correctly. You can see the screen shot, it is either jQuery or mvc who is doing it wrong.
–
Akash KavaDec 9 '11 at 16:21

@AkashKava, "country=US&State=null", is not json. Json sent to a server would look like 'json={"country": "US", "State": null}' (pre encoded) Note that it's still a string because that's the only thing that you can send to a server... then you need to do json decode on it on server.
–
EsailijaDec 9 '11 at 16:29

@Mike, well I will have to do this recursively because these objects are built dynamically, I am not manually sending them, they are part of my framework where things work correctly. I will perform this hack anyway but I just want to get to bottom of this as if this is an error in jQuery then my hack will be an unnecessary code, also what if the problem lies in MVC? I want to write hack correctly.
–
Akash KavaDec 9 '11 at 16:29