基本上,我发现作为 JavaScript 对象(关联数组)的 JSON 字符串,其属性/键之一为空字符串,将导致内置的 .NET 序列化程序引发异常。
例如这段代码:
string json = "{ \"\" : [\"b\"] }";
JavaScriptSerializer js = new JavaScriptSerializer();
var map = js.Deserialize<Dictionary<string, List<string>>>(json);
将抛出 ArgumentException,表明可能正确的 JSON 不允许属性名称为空字符串。只需浏览Crockford网站上的Backaus Naur 表单图/语法图,就可以看出允许使用空字符串。
object => '{' string ':' value '}'
string => ""
=> " chars "