Basically, I found that a JSON string that is a JavaScript object (associative array) with an empty string for one of its properties/keys will cause the built in .NET Serializer to throw an exception.
For example this code:
string json = "{ \"\" : [\"b\"] }";
JavaScriptSerializer js = new JavaScriptSerializer();
var map = js.Deserialize<Dictionary<string, List<string>>>(json);
Will throw an ArgumentException, suggesting that maybe proper JSON doesn’t allow empty strings for property names. Just glancing at the Backaus Naur Form Diagram / Syntax Diagram on Crockford’s site suggests that an empty string is allowed.
object => '{' string ':' value '}'
string => ""
=> " chars "